如何确定iPad用户是否在不规则形状的图像中轻拍?

时间:2010-07-27 08:55:22

标签: iphone graphics ipad interface-builder

我已经将UITapGestureRecognizer连接到包含我想要在iPad屏幕上显示的图像的UIImageView,并且能够正常使用用户点击。但是,我的图像是桌子上的一只手,我想知道用户是在手上还是在图像的桌面上轻敲了一下。我可以使用CGPoint tapLocation = [recognizer locationInView:self.view];来获取用户点击的x,y坐标但是我不知道如何将CGPoint映射到包含手的图像区域与包含手的区域桌子。到目前为止,我所阅读的所有内容都涉及确定CGPoint是否位于特定的矩形区域,但如果您需要确定CGPoint是否位于更不规则形状的边界,该怎么办?这甚至可能吗?任何建议或只是指出我正确的方向将是一个很大的帮助。谢谢!

5 个答案:

答案 0 :(得分:3)

您可以使用pointInside:withEvent:以编程方式定义命中区域。

详细说明一下,你只需要点一下,然后用一系列if语句来评估它是否属于你所追求的区域。如果是,则返回TRUE。如果没有,则返回FALSE。如果这与this post相关,那么您可以使用圆形条件来使用Pythagorean Theorem比较点与圆心的距离。

答案 1 :(得分:1)

派对迟到了, 但是你想要的核心工具是“多边形点”例程。 这是一种通用方法,独立于iOS。

谷歌有很多信息, 但一般方法是:

1)定义你的闭合多边形。     - 听起来这可能是你的情况下的一些工作。

2)选择任何不等于原点的点。    (是的,任何一点)

3)对于多边形中的每个边,    确定原始点到秒点的光线是否与该多边形边相交。     - 这需要一个线段 - 交叉射线程序,也可以在“管道”上找到。

4)如果交叉点的数量是奇数,则它在多边形内。    如果计数是均匀的,那就在外面。

对于一般几何类型的问题, 我强烈推荐Paul Bourke:http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/

答案 2 :(得分:0)

您可以使用覆盖手的大部分或全部的边界矩形。

如果用户用手指敲击手或桌子,我怀疑你是否希望他或她对水龙头非常精确。

答案 3 :(得分:0)

边界矩形答案的扩展,

  • 您可以定义几个较小的边界矩形,这些矩形可以近似于手而不会覆盖屏幕的其余部分。

OR

  • 您可以为每个对象使用矩形列表,并将手放在列表的末尾。在这种情况下,如果您点击屏幕右上角的按钮X(技术上位于手形矩形内),它将选择按钮X,因为首先找到该矩形。

答案 4 :(得分:0)

  • 通过黑白位图(每像素1位)定义形状。检查特定位是否已设置。如果你有很多大的形状,这会占用大量的内存,但对于一个有一只手的位图,这应该不是什么大问题。
  • 将形状定义为多边形。然后你需要做多边形点测试。维基百科有一篇精彩的文章,其中包含代码链接:http://en.wikipedia.org/wiki/Point_in_polygon
  • iPad库可能已经实现了这一点。抱歉,我无法帮助您,而不是iPad开发人员。