首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:如何使用CGLayer支持视网膜显示?

iOS:如何使用CGLayer支持视网膜显示?
EN

Stack Overflow用户
提问于 2011-07-18 15:39:08
回答 2查看 6.1K关注 0票数 19

我在委托方法drawLayer:inContext:中的CALayer上绘制了一个图。

现在我想支持Retina Display,因为图形在最新的设备上看起来很模糊。

对于我直接在CALayer传递的图形上下文中绘制的部分,通过如下设置CALayer的contentScale属性,可以很好地以高分辨率绘制。

代码语言:javascript
复制
if ([myLayer respondsToSelector:@selector(setContentsScale:)]) {
    myLayer.contentsScale = [[UIScreen mainScreen] scale];
}

但是对于我使用的部分,CGLayer仍然是模糊的。

如何在高分辨率的CGLayer上绘图以支持视网膜显示?

我想使用CGLayer重复绘制相同的图形图形形状,并截断超出图层边缘的图形线条。

我使用从CALayer传入的图形上下文通过CGLayerCreateWithContex获得CGLayer,并使用CG函数(如CGContextFillPathCGContextAddLineToPoint )绘制其上下文。

我需要同时支持iOS 4.x和iOS 3.1.3,包括视网膜和传统显示器。

谢谢,

库拉

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 20:03:17

这就是如何正确地为所有分辨率绘制CGLayer。

  1. 第一次创建图层时,您需要将尺寸乘以比例来计算正确的边界:

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

  • 如果当前设备有视网膜显示器,则绘制到图层的所有图形现在都将放大一倍。

  • 当您最终绘制图层的内容时,请确保使用CGContextDrawLayerInRect并提供未缩放的CGRect:

上下文边界= CGRectMake(0,0,宽度,高度);CGContextDrawLayerInRect(上下文,边界,高度)

就这样!

票数 28
EN

Stack Overflow用户

发布于 2011-07-20 22:39:06

我决定不使用CGLayer,而是直接在CALayer的图形环境中绘制,现在它在视网膜上以高分辨率绘制得很好。

我发现了类似的问题here,并且发现在我的例子中使用CGLayer是没有意义的。

我之所以使用CGLayer,是因为可以在Quartz 2D编程指南中找到苹果的示例程序"Using Multiple CGLayer Objects to Draw a Flag"。在本例中,它为一颗星创建了一个CGLayer,并多次使用它来绘制50颗星。我认为这是性能原因,但我没有看到任何性能差异。

为了切断超出图层边缘的图形线,我决定使用多个CALayers。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6729899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档