我有一个 CAShapeLayer,并尝试通过将其传递给 CGContextDrawLayerAtPoint 来绘制它,但在将 CAShapeLayer *__strong 的可保留参数传递给需要 CGLayerRef 的函数时出现错误。
我已经进行了一些浏览,但不知道如何将其转换/桥接 CAShapeLayer 到 CGLayerRef。
如果无法转换,那么可以使用 CGLayerCreateWithContext 创建 CAShapeLayer 吗?
我正在做的是使用 UIBezierPath 创建绘图,然后创建 CAShapeLayer 并将其路径设置为 UIBezierPath,然后我想显示它。我可以使用 addSublayer 来显示形状图层,但是我将在多个不同的点显示相同的形状,因此我计划使用 CGContextDrawLayerAtPoint 在不同的点显示它,而不是添加多个子图层。/p>
最佳答案
简短回答:不。
长答案:CAShapeLayer 是一个核心动画层 (CALayer)。您将其放入界面中,它会自行绘制。
我知道他们使用“layer”这个词的方式很令人困惑,但是CGContextDrawLayerAtPoint
与此无关(它以完全不同的方式使用“layer”这个词,指的是CGLayer,完全不同,使用方式也完全不同)。你在这里走错了兔子洞。
I could use
addSublayer:
to display the shape layer
不能。必须。这就是您使用 CAShapeLayer 所做的事情。
您正在寻找的替代方案是将 CGPath 从 CAShapeLayer 中拉出,并分配该路径并在 CGContext 中的多个位置多次描画它。但确实没有必要这样做。 iOS 绘图都是关于图层的;不要害怕有多个子层。
关于ios - CAShapeLayer 可以传递给 CGContextDrawLayerAtPoint 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253022/