在UIImage中轻松推动一个洞?

时间:2016-03-03 02:51:59

标签: ios performance rendering calayer uibezierpath

我有UIImageView替换图像。此视图的图层使用CAShapeLayer进行遮罩,以便在图像中创建圆形“孔”。为了创建漏洞,我使用UIBezierPath.usesEvenOddFillRule = true

静态时效果很好。但是我需要那个洞用户手指移动。为此,我每次用户移动手指时都会创建具有偶数规则的新UIBezierPath。在尺寸较小的小手机上看起来不错,但在iPhone 6 Plus上则不稳定。

关于如何使其顺利进行的任何想法都非常受欢迎。我不能只移动掩蔽框架CAShapeLayer - 它会移动洞穴机器人也隐藏图像的一些边缘。因此,唯一的方法是每次用户移动手指时更改其.path,这很慢。

编辑: matt's answer可以在某些情况下使用,但不适用于我的情况:我不是只显示UIBezierPath定义的整个图像的一部分。这部分通常是椭圆形(但可以是矩形或圆角矩形),并且在其中切有“孔”。当孔用户手指割草时,图像的显示部分/形状不会改变 - 它是静态的。

到目前为止已经存在的无效解决方案:

  1. 使用图像显示部分的边界创建UIBezierPath
  2. 在其上设置'偶数填充规则'
  3. UIBezierPath洞添加到其中
  4. 将其设置为CAShapeLayer的路径,并使用一些不透明的填充颜色
  5. 使用CAShapeLayer作为UIImageView
  6. 的掩码

    每次用户移动手指时都会重复此过程。我不能简单地移动整个遮罩层,因为这也会改变正在显示的图像部分。我是什么让它保持静止并只移动其中的洞。

1 个答案:

答案 0 :(得分:1)

  

它会移动洞穴机器人也隐藏图像的一些边缘

嗯,我不同意。移动蒙版是完全的方式。我不明白为什么你认为这有问题。也许问题仅在于你没有使掩模层足够。它不必与屏蔽层相同。在这种情况下,它需要大约是屏蔽层大小的9倍(3个水平层和3个垂直层),这样无论用户在任何方向滑动多少,它都将继续覆盖被遮盖的层。