所以我找到了3种方法来实现这一目标。
convertPoint:toView:
convertPoint:fromView:
convertRect:toView:
convertRect:fromView:
Bool CGRectContainsPoint(CGRect rect, CGPoint point);
BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil];
他们似乎都这样做但我可能错了。你可以检查一个点是否在某个视图中,考虑到它的帧然后得到真或假。
我最终使用哪一个或者我应该意识到可能出现的问题,这无关紧要吗?
答案 0 :(得分:0)
您应该了解每种方法的用途:
point
|接收器本地坐标系中的一个点(bounds
)。
除此之外,该方法可能只是使用传递的点和边界框来调用CGRectContainsPoint
。
CGRectContainsPoint
只是根据x
和y
检查origin
和size
坐标。简单的数学运算,但两者都必须在同一个坐标系中,因为rect和point都不包含有关各自坐标系的任何信息,它们都是绝对值。
convert*
函数使您能够将相对于接收器坐标系的CGPoint转换为其他相对坐标系。
要了解每种方法的优点,您必须了解不同CGRect
的含义,特别是frame
和bounds
:this answer是通往为此而努力。
在了解了不同属性意味着什么之后,应该很容易选择正确的功能。
TL; DR:convert*
方法使您能够在坐标系之间转换CGPoint
。另外两个选项在一个固定坐标系内运行。在你的特定情况下选择你需要的那个是你的工作。
例如,您可能必须首先变换点然后执行命中检测。