在 UIImage 中平滑地移动一个洞?
Smootly mooving a hole in UIImage?
我有一个 UIImageView
正在显示图像。此视图的图层使用 CAShapeLayer
遮罩,以便在图像中创建圆形 "hole"。要创建孔,我使用 UIBezierPath
和 .usesEvenOddFillRule = true
。
静态时效果很好。但我需要那个洞用用户的手指移动。为此,我会在每次用户移动手指时使用奇偶规则创建新的 UIBezierPath
。在图像较小的小型手机上它看起来不错,但在 iPhone 6 Plus 上它是不稳定的。
任何关于如何使其顺利的想法都非常受欢迎。我不能只移动遮罩框架 CAShapeLayer
- 它会移动 hole bot 也会隐藏图像的一些边缘。所以唯一的方法是每次用户移动手指时更改它的 .path
,这很慢。
编辑: 在某些情况下会起作用,但在我的情况下不起作用:我不会只显示由 [=12 定义的一部分图像=].这部分通常是椭圆形的(但可以是矩形或圆角矩形)并且其中有 "hole" 切割。当用户用手指修剪洞时,显示的图像 part/shape 不会改变 - 它是静态的。
目前存在的低效解决方案是:
- 创建
UIBezierPath
与图像显示部分的边界
- 设置'even off fill rule'就可以了
- 加上
UIBezierPath
个洞
- 将其设置为
CAShapeLayer
的路径,并使用一些不透明的填充颜色
- 使用
CAShapeLayer
作为 UIImageView
的掩码
每次用户移动手指时都会重复此过程。我不能简单地移动整个遮罩层,因为这也会改变正在显示的图像部分。我想保持静止并只移动其中的孔。
it would move the hole bot also hide some edges of the image
嗯,我不同意。移动遮罩 正是 的方法。我不明白你为什么认为这有问题。也许问题仅仅是您没有将遮罩层大设置得足够大。它不必与它所遮盖的图层大小相同。在这种情况下,它需要大约是遮罩层大小的 9 倍(3 个水平和 3 个垂直),这样无论用户在任何方向滑动多远,它都会继续覆盖遮罩层。
我有一个 UIImageView
正在显示图像。此视图的图层使用 CAShapeLayer
遮罩,以便在图像中创建圆形 "hole"。要创建孔,我使用 UIBezierPath
和 .usesEvenOddFillRule = true
。
静态时效果很好。但我需要那个洞用用户的手指移动。为此,我会在每次用户移动手指时使用奇偶规则创建新的 UIBezierPath
。在图像较小的小型手机上它看起来不错,但在 iPhone 6 Plus 上它是不稳定的。
任何关于如何使其顺利的想法都非常受欢迎。我不能只移动遮罩框架 CAShapeLayer
- 它会移动 hole bot 也会隐藏图像的一些边缘。所以唯一的方法是每次用户移动手指时更改它的 .path
,这很慢。
编辑:
目前存在的低效解决方案是:
- 创建
UIBezierPath
与图像显示部分的边界 - 设置'even off fill rule'就可以了
- 加上
UIBezierPath
个洞 - 将其设置为
CAShapeLayer
的路径,并使用一些不透明的填充颜色 - 使用
CAShapeLayer
作为UIImageView
的掩码
每次用户移动手指时都会重复此过程。我不能简单地移动整个遮罩层,因为这也会改变正在显示的图像部分。我想保持静止并只移动其中的孔。
it would move the hole bot also hide some edges of the image
嗯,我不同意。移动遮罩 正是 的方法。我不明白你为什么认为这有问题。也许问题仅仅是您没有将遮罩层大设置得足够大。它不必与它所遮盖的图层大小相同。在这种情况下,它需要大约是遮罩层大小的 9 倍(3 个水平和 3 个垂直),这样无论用户在任何方向滑动多远,它都会继续覆盖遮罩层。