Базовая ширина штриха Графика несовместима между линиями и дугами? - PullRequest
6 голосов
/ 17 декабря 2010

Вариант использования: я создаю подкласс UIView для создания пользовательского представления, которое «склеивает» UIImage с закругленным прямоугольником (обрезает изображение с закругленным прямоугольником).Код работает;Я использовал метод, похожий на этот вопрос .

Однако я хочу обвести обтравочный контур, чтобы создать «рамку».Это работает, но штрихи дуги выглядят заметно отличающимися от штрихов линии.Я пытался отрегулировать ширину обводки до больших значений (сначала я думал, что это пикселизация), но сглаживание, похоже, по-разному обрабатывает дуги и линии.*

Uneven stroke image

Это код, который его рисует:

CGContextSetRGBStrokeColor(context, 0, 0, 0, STROKE_OPACITY);
CGContextSetLineWidth(context, 2.0f);
CGContextAddPath(context, roundRectPath);
CGContextStrokePath(context);

Кто-нибудь знает, как сделать эти линии плавными?

Ответы [ 2 ]

12 голосов
/ 19 декабря 2010

… но сглаживание, похоже, обрабатывает дуги и линии по-разному.

Нет, это не так.

Ваша ширина хода одинакова - 2 пт.

Что плохого в том, что вы обрезали прямоугольник, и стороны вашей фигуры находятся прямо над краями этого прямоугольника, поэтому рисуются только половины сторон, которые находятся внутри прямоугольника. Вот почему края появляются только 1 px в ширину.

Решение состоит в том, чтобы либо не обрезать, либо увеличить прямоугольник отсечения на 2 пт по каждой оси перед отсечением к нему, либо переместить края фигуры внутрь на 1 пт с каждой стороны. (ETA: Или, да, сделай внутренний удар.)

2 голосов
/ 19 декабря 2010

На всякий случай, если кто-то пытается сделать то же самое, что и я (вокруг прямоугольника изображения):

Класс UIImageView имеет свойство layer типа CALayer.CALayer уже имеет эту встроенную функциональность (для меня это было немного удивительно, я нигде не смог ее найти):

UIImageView *thumbnailView = [UIImage imageNamed:@"foo.png"];
thumbnailView.layer.masksToBounds = YES;
thumbnailView.layer.cornerRadius = 15.0f;
thumbnailView.layer.borderWidth = 2.0f;
[self.view addSubview:thumbnailView];

Также делает свое дело.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...