我有一个UIImageView
替换图像。此视图的图层被CAShapeLayer
遮罩,以便在图像中创建圆形“孔”。为了创建孔,我将UIBezierPath
与.usesEvenOddFillRule = true
一起使用。
静态时可以正常工作。但是我需要那个孔来用用户的手指移动。为此,我每次用户移动手指时都使用奇数规则创建新的UIBezierPath
。在具有较小图像的较小手机上看起来还可以,但在iPhone 6 Plus上则显得断断续续。
关于如何使其平滑的任何想法都是非常好的。我不能只移动蒙版CAShapeLayer
的框架-它会移动打孔机器人,并且还会隐藏图像的某些边缘。因此,唯一的方法是每次用户移动手指时都要更改其.path
,这很慢。
编辑:matt's answer将在某些情况下,但在我的情况下不起作用:我不显示整个图像仅由UIBezierPath
定义它的一部分。该部分通常是椭圆形的(但可以是矩形或圆形矩形),并且在其中切有“孔”。当用用户的手指修剪洞时,图像的显示部分/形状不会改变-它是静态的。
迄今为止存在的无效解决方案是:
用图像显示部分的边界创建UIBezierPath
在其上设置“均匀填充规则”
将孔的UIBezierPath
添加到其中
用一些不透明的填充颜色将其设置为CAShapeLayer
的路径
使用该CAShapeLayer
作为UIImageView
的掩码
每次用户移动手指时都重复此过程。我不能简单地移动整个遮罩层,因为那也会改变所显示图像的一部分。我要保持静止并仅移动其中的孔。
最佳答案
它会移动打孔机器人,还会隐藏图像的某些边缘
好吧,我不同意。移动遮罩正是这样做的方法。我不明白您为什么认为这有问题。可能的问题仅仅是您没有使遮罩层足够大。它的大小不必与要遮罩的图层相同。在这种情况下,它需要约为被遮罩层(水平的3个和垂直的3个)的9倍,以便无论用户沿任何方向滑动遮盖的层,它都将继续覆盖被遮盖的层。
关于ios - 顺利移动UIImage中的孔?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35762289/