2014-04-23 85 views
2

我有一个CAShapeLayer,并试图通过将它传递给CGContextDrawLayerAtPoint来绘制它,但得到一个有关将一个CAShapeLayer * __ strong的可保留参数传递给期望CGLayerRef的函数的错误。CAShapeLayer可以传递给CGContextDrawLayerAtPoint吗?

我已经做了一些浏览,但无法弄清楚如何转换它/将CAShapeLayer桥接到CGLayerRef。

如果它不可能转换,那么CAShapeLayer可以使用CGLayerCreateWithContext创建吗?

我在做的是用UIBezierPath创建一个图形,然后创建一个CAShapeLayer并将其路径设置为UIBezierPath,然后我想显示它。我可能使用addSublayer来显示形状图层但是我要在多个不同的点显示相同的形状,而不是添加多个我打算使用CGContextDrawLayerAtPoint在不同的点上显示它的子图层。

回答

1

简短回答:没有。

长答案: CAShapeLayer是一个核心动画层(CALayer)。你把它放入你的界面,并且它自己吸引。

我知道它很混乱,它们使用单​​词“图层”的方式,但CGContextDrawLayerAtPoint与此无关(它以完全不同的方式使用单词“图层”,指CGLayer,它完全不同并完全不同地使用)。你在这里错过了一个错误的兔子洞。

我可以使用addSublayer:显示形状层

不可能。必须。这就是你用CAShapeLayer所做的。

您正在寻找的替代方法是将CGPath从CAShapeLayer中提取出来,然后在CGContext中分配该路径并在多个位置多次提取它。但是真的没有必要这样做。 iOS绘图都是关于图层的;不要害怕有多个子层。

+0

请参阅我的“罗盘”示例,其中复杂绘图由许多子图层组成。别担心。要开心。 http://www.apeth.com/iOSBook/ch16.html – matt

+0

谢谢,是的,我被术语层的双重含义弄糊涂了(我没有注意到CA和CG部分)。因此,有几十个子层在很大程度上不是无效的? – Gruntcakes

+0

不要绘制它们。现在,你开始动画/滚动所有这些,这可能是一个问题。但是让它们只显示在屏幕上 - 没问题,这就是屏幕_is_,它是一个层的渲染树。你在iOS屏幕上看到的一切都是一层。 – matt

相关问题