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

时间:2011-10-06 05:55:03

标签: ios cocoa-touch ipad hittest point-in-polygon

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

有没有什么比一个天真的算法更好的方法,它会遍历所有[可能*]活动区域的列表,并询问每个活动区域是否在其中?

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

我可以看到这些选项:

  • 实现我自己的全面四叉树实现。这种过早的优化,这是重新发明轮子,因为我希望Apple的热门测试实施已经优化

  • 通过维护每个最大和最小x和y坐标以及首先对该矩形进行点击测试来限制[可能的*]区域。实际上,我的子视图frame 那些矩形。我希望Apple的热门测试能够使用它们。

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

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

有什么建议吗?

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

0 个答案:

没有答案