2010-10-06 8 views
2

Я рисую линию в CATiledLayer, используя следующий код:нечетких пикселей трансзональных при рисовании в CATiledLayer на iPhone 4

- (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); 
} 

Что я получаю это 4px размытые линии:

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

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

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

ответ

1

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

Установите layer.contentsScale = 2.0 перед прикреплением его к виду.

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