我的主视图有多个(可能很多)多边形活动区域作为子视图实现。当用户触摸视图时,我想确定她是否触及其中一个活动区域。
有没有什么比一个天真的算法更好的方法,它会遍历所有[可能*]活动区域的列表,并询问每个活动区域是否在其中?
我无法使用(不覆盖它)hitTest:withEvent:
,因为其文档说明“此方法忽略隐藏的视图对象,禁用用户交互或alpha级别小于0.01。”。我的子视图确实是隐藏的(大部分时间)。
我可以看到这些选项:
实现我自己的全面四叉树实现。这种过早的优化,这是重新发明轮子,因为我希望Apple的热门测试实施已经优化
通过维护每个最大和最小x和y坐标以及首先对该矩形进行点击测试来限制[可能的*]区域。实际上,我的子视图frame
是那些矩形。我希望Apple的热门测试能够使用它们。
在我的子视图中覆盖Cocoa Touch的hitTest:withEvent:
以删除记录的限制。希望这不会对我的应用程序产生负面影响(我可以忽略我的子视图上的任何虚假触摸事件,或者将它们转发到我的主视图)。
天真并相信用户永远不会在实际使用中添加太多活动区域,以使天真算法执行得太差。
有什么建议吗?
请注意,多边形总是很简单,但不一定是凸面。
此外,我使用的最精确的命中测试是使用Quartz例程CGPathContainsPoint