bezierPathWithRoundedRect: - странный артефакт рендеринга
Я рисую простой прямоугольник с несколькими закругленными углами:
UIBezierPath * p = [UIBezierPath bezierPathWithRoundedRect:outline
byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
cornerRadii:CGSizeMake(8, 8)];
Как ни странно, верхний левый угол кажется неполным - небольшая выемка отсутствует:
Как ни странно - если добавить [p close]
- эта проблема уходит. Теперь документация предполагает, что:
Этот метод создает закрытый подпуть, действующий в направлении по часовой стрелке (относительно системы координат по умолчанию), поскольку он создает необходимые отрезки линий и кривых.
поэтому мне интересно, где все идет не так? Я неправильно понимаю документацию - или в моем коде есть небольшая ошибка / проблема?
Для полноты обидный код
- (void)drawRect:(CGRect)rect {
CGRect outline = CGRectInset(self.bounds, 4, 4);
UIBezierPath * p = [UIBezierPath bezierPathWithRoundedRect:outline
byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight
cornerRadii:CGSizeMake(8, 8)];
// [p closePath];
[[UIColor blackColor] setStroke];
[p setLineWidth:4];
[p stroke];
....
1 ответ
Похоже, что окончательный путь на самом деле не закрыт, что может быть ошибкой (стоит подать, если так) - по сути, поскольку он не знает, что начальная и конечная точки связаны, вы видите конечные заглавные буквы (которые по умолчанию нарисованы только до точного конца пути), а не непрерывной линии. Это звучит как твой -close
решение работ; пойти с этим.