Ios 查找包含点的不规则形状的子视图

Ios 查找包含点的不规则形状的子视图,ios,cocoa-touch,ipad,hittest,point-in-polygon,Ios,Cocoa Touch,Ipad,Hittest,Point In Polygon,我的主视图有几个(也许很多)多边形活动区域作为子视图实现。当用户触摸视图时,我想确定她是否触及其中一个活动区域 有什么比一个简单的算法更好的方法来迭代所有[可能的*]活动区域的列表,并询问它们中的每一个点是否在其中 我无法使用(如果不覆盖它)hitTest:withEvent:,因为它的文档说明“此方法忽略隐藏的、已禁用用户交互的或alpha级别小于0.01的视图对象。”。我的子视图确实是隐藏的(大多数时候) 我可以看到这些选项: 实现我自己完整的四叉树实现。这散发着过早优化的味道,这是对轮子

我的主视图有几个(也许很多)多边形活动区域作为子视图实现。当用户触摸视图时,我想确定她是否触及其中一个活动区域

有什么比一个简单的算法更好的方法来迭代所有[可能的*]活动区域的列表,并询问它们中的每一个点是否在其中

我无法使用(如果不覆盖它)
hitTest:withEvent:
,因为它的文档说明“此方法忽略隐藏的、已禁用用户交互的或alpha级别小于0.01的视图对象。”。我的子视图确实是隐藏的(大多数时候)

我可以看到这些选项:

  • 实现我自己完整的四叉树实现。这散发着过早优化的味道,这是对轮子的重新发明,因为我希望苹果的命中测试实现已经得到优化

  • 通过保持每个区域的最大和最小x和y坐标,限制[可能的*]区域,并首先在该矩形上点击测试。事实上,我的子视图
    frame
    就是那些矩形。我希望苹果的热门测试会用到这些

  • 在我的子视图中覆盖Cocoa Touch的
    hitTest:withEvent:
    ,以删除记录的限制。希望这不会对我的应用程序产生负面影响(例如,我可以忽略子视图上的任何虚假触摸事件,或者将它们转发到我的主视图)

  • 要天真,相信用户永远不会在实际使用中添加太多的活动区域,以使天真算法执行得太差

有什么建议吗

请注意,多边形总是简单的,但不一定是凸的。
另外,我使用的最精确的命中测试是石英例程
CGPathContainsPoint

hitTest:withEvent:
的三个标准中,您想拓宽哪一个?检测隐藏视图、禁用用户交互的视图或alpha非常小或为0的视图的点击率?重要的是要注意,仅在子视图的类上重写它不会有帮助;您还必须在主视图的类中实现它。
hitTest:withEvent:
的三个标准中,您想扩展哪一个?检测隐藏视图、禁用用户交互的视图或alpha非常小或为0的视图的点击率?重要的是要注意,仅在子视图的类上重写它不会有帮助;您还必须在主视图的类中实现它。