ios - CAShapeLayer 可以传递给 CGContextDrawLayerAtPoint 吗?

标签 ios calayer uibezierpath

我有一个 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/

相关文章:

ios - 代码 : Why same storyboard design display differently on simulator and device?

ios - Swift 3 设备运动重力

calayer - 导入 SwiftUI 时如何使 NSView 符合 CALayerDelegate?

ios - 对 UIBezierpath 的某些部分进行动画处理

ios - UIBezierpath 没有绘制平滑的图像

ios - 当其中一个是动画时,等待 iOS 中的两个完成的任务?

ios - 使用另一行时模糊 UIPickerView 行之一

ios - 如何在 swift 4 中比较两个 CGColor

ios - drawRect 绘图的动画

ios - 一侧线宽的贝塞尔曲线路径?