检测视点是否在另一个视图中时的最佳选择?

时间:2015-12-26 11:20:24

标签: ios objective-c uiview cgrect cgpoint

所以我找到了3种方法来实现这一目标。

  1. convertPoint:toView: convertPoint:fromView: convertRect:toView: convertRect:fromView:

  2. Bool CGRectContainsPoint(CGRect rect, CGPoint point);

  3. BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil];

  4. 他们似乎都这样做但我可能错了。你可以检查一个点是否在某个视图中,考虑到它的帧然后得到真或假。

    我最终使用哪一个或者我应该意识到可能出现的问题,这无关紧要吗?

1 个答案:

答案 0 :(得分:0)

您应该了解每种方法的用途:

pointInside:withEvent:的文档说

  

point |接收器本地坐标系中的一个点(bounds)。

除此之外,该方法可能只是使用传递的点和边界框来调用CGRectContainsPoint

CGRectContainsPoint只是根据xy检查originsize坐标。简单的数学运算,但两者都必须在同一个坐标系中,因为rect和point都不包含有关各自坐标系的任何信息,它们都是绝对值。

convert*函数使您能够将相对于接收器坐标系的CGPoint转换为其他相对坐标系。

要了解每种方法的优点,您必须了解不同CGRect的含义,特别是frameboundsthis answer是通往为此而努力。

在了解了不同属性意味着什么之后,应该很容易选择正确的功能。

TL; DR:convert*方法使您能够在坐标系之间转换CGPoint。另外两个选项在一个固定坐标系内运行。在你的特定情况下选择你需要的那个是你的工作。

例如,您可能必须首先变换点然后执行命中检测。

相关问题