iphone - 如何检测触摸点是否被CALayer的绘制内容包含?

标签 iphone ios ipad touch calayer

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

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

最佳答案

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

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

对于不太细粒度的控制,您可以使用 CALayers 获取触摸层

- (CALayer *)hitTest:(CGPoint)thePoint

方法。

如果您有一个嵌套级别 < 1000 的图层层次结构(这几乎总是正确的),我不会太担心。

关于iphone - 如何检测触摸点是否被CALayer的绘制内容包含?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9193947/

相关文章:

iphone - 如何编写 OCUnit 测试用例

ios - Collection View 单元格多项选择错误

ios - 如何在应用程序中保存用户信息

iphone - ffmpeg 转换命令输出到 iPad 的 h.264

iphone - 选择 UITableViewCell AccessoryView,与选择行分开

c++ - # 包含在 xcode 中找不到的 <cstddef> 文件

ios - 'read' 中没有名为 'metal::texturecube' 的成员

ios - 我无法从 JSON 获取我的数组以加载到 UITableView

ios - 无法在 iPad 上取消 touchID

ios - 以编程方式将 UIImageView 添加到 UIScrollView