如何检测触摸点是否包含在CALayer的绘图内容中



UIView中添加了三个层。一层绘制一个矩形。一个人画一个圆圈。一个人画一个多边形。该层的不透明度为否。当我触摸多边形时,我想得到绘制多边形的正确层。三层都被填满了。我已经实现了这一点。但我不知道我们是否有更好的解决方案。我的方法是这样的:1.使用-drawLayer:inContext绘制内容。存储您使用的CGPath。2.在UIView的-touchedEnded:withEvent方法中。使用CGPathContainsPoint()来检测触摸点是否包含在CGPath中。

也许这是解决这个问题的愚蠢方法。有谁能告诉我如何更好地解决它吗?

如果您需要对路径进行准确的命中测试,恐怕您必须按照建议使用CGPathContainsPoint检查/迭代层层次结构。

在迭代时,可以通过跳过点在其框架之外的层来优化它。

对于细粒度较低的控制,您可以使用CALayer的来获得触摸层

- (CALayer *)hitTest:(CGPoint)thePoint

方法。

如果具有嵌套级别<1000(这几乎总是正确的)我不会太担心。

最新更新