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

Iphone 如何确定iPad用户是否在不规则形状的图像中点击?,iphone,graphics,ipad,interface-builder,Iphone,Graphics,Ipad,Interface Builder,我已经将一个UIAppgestureRecognitizer连接到一个UIImageView,其中包含我想在iPad屏幕上显示的图像,并且能够很好地使用用户点击。然而,我的图像是一只手放在桌子上的图像,我想知道用户是点击了手还是点击了图像的桌子部分。我可以通过CGPoint-tappocation=[recognizer-locationInView:self.view]获得用户点击的x,y坐标但是我不知道如何将该点映射到,比如说,包含手的图像区域与包含表格的图像区域。到目前为止,我读到的所有内

我已经将一个
UIAppgestureRecognitizer
连接到一个UIImageView,其中包含我想在iPad屏幕上显示的图像,并且能够很好地使用用户点击。然而,我的图像是一只手放在桌子上的图像,我想知道用户是点击了手还是点击了图像的桌子部分。我可以通过
CGPoint-tappocation=[recognizer-locationInView:self.view]获得用户点击的x,y坐标
但是我不知道如何将该点映射到,比如说,包含手的图像区域与包含表格的图像区域。到目前为止,我读到的所有内容都是关于确定一个CGPoint是否位于一个特定的矩形区域中,但是如果需要确定该CGPoint是否位于一个更不规则形状的边界中,该怎么办?这可能吗?任何建议或只是给我指出正确的方向都会大有帮助。谢谢

您可以使用以编程方式定义命中区域

为了详细说明,您只需抓住要点,并使用一系列if语句来评估它是否落在您所关注的区域内。如果是,则返回TRUE。如果没有,则返回FALSE。如果这与相关,则可以使用循环条件来比较点到圆中心的距离。

可以使用编程方式定义命中区域


为了详细说明,您只需抓住要点,并使用一系列if语句来评估它是否落在您所关注的区域内。如果是,则返回TRUE。如果没有,则返回FALSE。如果这与相关,则可以使用圆形条件来比较点到圆中心的距离。

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


如果用户用手指轻触手或桌子,我怀疑您是否希望他或她在轻触时非常精确。

您可以使用覆盖大部分或全部手的边框


如果用户用手指轻触手或桌子,我怀疑您是否希望他或她在轻触时非常精确。

边界矩形答案的扩展

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

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

边界矩形答案的扩展

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

  • 您可以为每个对象使用一个矩形列表,并将手放在列表的末尾。在这种情况下,如果您点击屏幕右上角的按钮X,从技术上讲,它位于手部矩形内,它会选择按钮X,因为该矩形是首先找到的
      • 通过黑白位图(每像素1位)定义形状。检查是否设置了特定位。如果你有很多大的形状,这会消耗很多内存,但是对于一个有手的位图来说,这应该不是什么大问题
      • 将形状定义为多边形。然后你需要做多边形中的点测试。Wikipedia有一篇关于这方面的精彩文章,这里有代码链接:
      • iPad库可能已经实现了这一点。对不起,我帮不了你,不是iPad开发者
          • 通过黑白位图(每像素1位)定义形状。检查是否设置了特定位。如果你有很多大的形状,这会消耗很多内存,但是对于一个有手的位图来说,这应该不是什么大问题
          • 将形状定义为多边形。然后你需要做多边形中的点测试。Wikipedia有一篇关于这方面的精彩文章,这里有代码链接:
          • iPad库可能已经实现了这一点。对不起,我帮不了你,不是iPad开发者
            • 晚会迟到了, 但这里需要的核心工具是“多边形中的点”例程。 这是一种通用方法,独立于iOS

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

              1) 定义闭合多边形。 -听起来这对你来说可能有点麻烦

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

              3) 对于多边形中的每条边, 确定从原始点到秒点的光线是否与该多边形边相交。 -这需要线段相交光线例程,也可在“管”上使用

              4) 如果交点的数量是奇数,则它位于多边形内部。 如果计数是偶数,它就在外面

              对于一般几何图形类型问题, 我强烈推荐保罗·伯克:

              晚会迟到, 但这里需要的核心工具是“多边形中的点”例程。 这是一种通用方法,独立于iOS

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

              1) 定义闭合多边形。 -听起来这对你来说可能有点麻烦

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

              3) 对于多边形中的每条边, 确定从原始点到秒点的光线是否与该多边形边相交。 -这需要线段相交光线例程,也可在“管”上使用

              4) 如果交点的数量是奇数,则它位于多边形内部。 如果计数是偶数,它就在外面

              对于一般几何图形类型问题,
              我强烈推荐Paul Bourke:

              这实际上有点接近我目前的解决方案,但我觉得这非常困难,而且还有很多问题需要解决