【发布时间】:2016-03-03 02:51:58
【问题描述】:
我有一个 UIImageView 显示图像。该视图的图层被CAShapeLayer 遮罩,以便在图像中创建圆形“洞”。为了创建洞,我使用UIBezierPath 和.usesEvenOddFillRule = true。
静态时效果很好。但我需要那个洞用用户手指移动。为此,每次用户移动手指时,我都会使用奇偶规则创建新的UIBezierPath。在具有较小图像的较小手机上,它看起来还可以,但在 iPhone 6 Plus 上它是不稳定的。
任何关于如何使其顺利的想法都非常受欢迎。我不能只移动遮罩CAShapeLayer 的框架 - 它会移动孔机器人也会隐藏图像的一些边缘。所以唯一的方法是每次用户移动手指时改变它的.path,这很慢。
编辑: matt's answer 可以在某些情况下工作,但不适用于我的情况:我没有显示整个图像,只显示由UIBezierPath 定义的一部分。这部分通常是椭圆形的(但可以是矩形或圆角矩形),并且在其中切有“孔”。当用户用手指修剪孔时,图像的显示部分/形状不会改变 - 它是静态的。
到目前为止,效率低下的解决方案是:
- 创建带有图像显示部分边界的
UIBezierPath - 在其上设置“均匀填充规则”
- 将洞的
UIBezierPath添加到它 - 将其设置为
CAShapeLayer的路径,并带有一些不透明的填充颜色 - 使用
CAShapeLayer作为UIImageView的掩码
每次用户移动手指时都会重复此过程。我不能简单地移动整个遮罩层,因为这也会改变正在显示的图像部分。我要保持静止并只移动其中的洞。
【问题讨论】:
标签: ios performance rendering calayer uibezierpath