Рисование прямоугольника с помощью Core Graphics на iPhone - PullRequest
1 голос
/ 03 декабря 2011

Я пытаюсь нарисовать прямоугольник на моем подклассе UIView, и все работает, за исключением удвоения ширины линии (я использую iPhone Simulator atm, в версии Retina).

Это метод drawRect:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGRect innerRect = CGRectInset(rect, 5, 5);
    CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]);
    CGContextSetLineWidth(context, 2);
    CGContextMoveToPoint(context, CGRectGetMinX(innerRect), CGRectGetMinY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMinY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMaxX(innerRect), CGRectGetMaxY(innerRect));
    CGContextAddLineToPoint(context, CGRectGetMinX(innerRect), CGRectGetMaxY(innerRect));
    CGContextClosePath(context);
    CGContextStrokePath(context);
}

Этот код рисует прямоугольник в правильном месте, но шириной 4 пикселя, а не указанным 2 пикселя.

Глядя в Интернете, я вижу, что мне, возможно, придется установить коэффициент масштабирования, поэтому я попытался добавить:

    self.contentScaleFactor = [UIScreen mainScreen].scale;
    self.layer.contentsScale = [UIScreen mainScreen].scale;

в начале метода, и когда это не сработало, я попытался:

    self.contentScaleFactor = 2;
    self.layer.contentsScale = 2;

(как 2 - число, которое должно быть возвращено методом scale для дисплеев сетчатки) И это тоже не сработало.

Это просто проблема с симулятором, который будет исправлен при запуске его на устройстве? (Я обновил его до 5.1, но не забудьте обновить Xcode, так что я в настоящее время 2 часа в 7-часовом ожидании завершения загрузки обновления Xcode)

Или я что-то упускаю?

1 Ответ

3 голосов
/ 03 декабря 2011

Это правильное поведение.

Вы указываете ширину в 2 точки (не в пикселях).На стандартном экране, который будет транслироваться до 2 пикселей, но на сетчатке, который будет транслироваться до 4 пикселей.Вы также должны заметить, что размер прямоугольника, который вы проходите, не меняется со стандартным или сетчатки.Apple рекомендует рисовать точками, а не пикселями.

Хорошим примером является видео «WWDC 2011 Session 129 - Практическое рисование для разработчиков iOS».Хотя видео в целом является информативным, смысл того, о чем вы говорите, начинается примерно в 10:24 в видео.

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