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 решение работ; пойти с этим.

Другие вопросы по тегам