我在委托方法drawLayer:inContext:中的CALayer上绘制了一个图。
现在我想支持Retina Display,因为图形在最新的设备上看起来很模糊。
对于我直接在CALayer传递的图形上下文中绘制的部分,通过如下设置CALayer的contentScale属性,可以很好地以高分辨率绘制。
if ([myLayer respondsToSelector:@selector(setContentsScale:)]) {
myLayer.contentsScale = [[UIScreen mainScreen] scale];
}但是对于我使用的部分,CGLayer仍然是模糊的。
如何在高分辨率的CGLayer上绘图以支持视网膜显示?
我想使用CGLayer重复绘制相同的图形图形形状,并截断超出图层边缘的图形线条。
我使用从CALayer传入的图形上下文通过CGLayerCreateWithContex获得CGLayer,并使用CG函数(如CGContextFillPath或CGContextAddLineToPoint )绘制其上下文。
我需要同时支持iOS 4.x和iOS 3.1.3,包括视网膜和传统显示器。
谢谢,
库拉
发布于 2012-01-05 20:03:17
这就是如何正确地为所有分辨率绘制CGLayer。
int width = 25;int height = 25;float scale = self contentScaleFactor;CGRect bounds = CGRectMake(0,0,width * scale,height * scale);context layer = CGLayerCreateWithContext(context,bounds.size,NULL);CGContextRef layerContext =NULL然后需要为您的层上下文设置正确的比例:
CGContextScaleCTM(layerContext,scale,scale);
上下文边界= CGRectMake(0,0,宽度,高度);CGContextDrawLayerInRect(上下文,边界,高度)
就这样!
发布于 2011-07-20 22:39:06
我决定不使用CGLayer,而是直接在CALayer的图形环境中绘制,现在它在视网膜上以高分辨率绘制得很好。
我发现了类似的问题here,并且发现在我的例子中使用CGLayer是没有意义的。
我之所以使用CGLayer,是因为可以在Quartz 2D编程指南中找到苹果的示例程序"Using Multiple CGLayer Objects to Draw a Flag"。在本例中,它为一颗星创建了一个CGLayer,并多次使用它来绘制50颗星。我认为这是性能原因,但我没有看到任何性能差异。
为了切断超出图层边缘的图形线,我决定使用多个CALayers。
https://stackoverflow.com/questions/6729899
复制相似问题