расплывчатый пиксель при рисовании в CATiledLayer на iPhone 4 - PullRequest
2 голосов
/ 06 октября 2010

Я рисую линию в CATiledLayer, используя следующий код:

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx {
    CGContextMoveToPoint(ctx, 130, 100.5);
    CGContextAddLineToPoint(ctx, 160, 100.5);
    CGContextSetRGBStrokeColor(ctx, 1, 0, 0, 1);
    CGContextSetRGBFillColor(ctx, 1, 0, 0, 1);
    CGContextDrawPath(ctx, kCGPathStroke);
}

Я получаю размытую линию размером 4 пикселя:

http://img837.imageshack.us/img837/5002/fuzzyline.png

Если я изменю CATiledLayer на CALayer, линия будет четкой, и ее ширина будет 2 пикселя, как и ожидалось. Я получаю такое поведение только на iPhone 4, на 3GS линия четкая как на CALayer, так и на CATiledLayer. Конечно, в 3GS линия имеет толщину 1px.

Любая идея, как преодолеть это поведение.

1 Ответ

1 голос
/ 06 октября 2010

Я нашел это: CATiledLayer создается с contentScale == 1.0. Если вы присоедините его к представлению с помощью contentScaleFactor == 2.0, слой будет увеличен, и вот где мой чертеж облажается.

Решение: Установите layer.contentsScale = 2.0, прежде чем прикреплять его к виду.

Apple говорит, что любой слой, созданный без привязки к представлению, имеет contentScale == 1.0, но в моем тесте CALayer создается с contentScale == 2.

...