OGeek|极客世界-中国程序员成长平台

标题: ios - 可以将 CAShapeLayer 传递给 CGContextDrawLayerAtPoint 吗? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:32
标题: ios - 可以将 CAShapeLayer 传递给 CGContextDrawLayerAtPoint 吗?

我有一个 CAShapeLayer,并试图通过将其传递给 CGContextDrawLayerAtPoint 来绘制它,但在将 CAShapeLayer *__strong 的可保留参数传递给需要 CGLayerRef 的函数时出错。

我进行了一些浏览,但不知道如何将它转换/桥接 CAShapeLayer 到 CGLayerRef。

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

我正在做的是用 UIBezierPath 创建一个绘图,然后创建一个 CAShapeLayer 并将其路径设置为 UIBezierPath,然后我想显示它。我可以使用 addSublayer 来显示形状图层,但是我将在多个不同的点显示相同的形状,因此我计划使用 CGContextDrawLayerAtPoint 在不同的点显示它而不是添加多个子图层。



Best Answer-推荐答案


简答:不。

长答案: CAShapeLayer 是一个核心动画层(CALayer)。你把它放到你的界面里,它就会自己画出来。

我知道他们使用“层”一词的方式令人困惑,但 CGContextDrawLayerAtPoint 与此无关(它以完全不同的方式使用“层”一词,指的是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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4