2

我正在使用以下代码在 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);
}

我得到的是这条 4px 的模糊线:

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

如果我将 CATiledLayer 更改为 CALayer,则线条清晰且宽度为 2px,正如预期的那样。我只在 iPhone 4 上得到这种行为,在 3GS 上,CALayer 和 CATiledLayer 上的线条都很清晰。当然,在 3GS 上,这条线是 1px 粗的。

任何想法如何克服这种行为。

4

1 回答 1

1

我找到了: CATiledLayer 是使用 contentsScale == 1.0 创建的。如果将其附加到 contentScaleFactor == 2.0 的视图,则图层会放大,这就是我的绘图搞砸的地方。

解决方案:在附加视图之前设置 layer.contentsScale = 2.0。

苹果表示,任何未附加到视图的图层都具有 contentScale == 1.0,但在我的测试中,CALayer 是使用 contentScale == 2 创建的。

于 2010-10-06T14:56:45.400 回答