1.在UIView中的关于坐标转换的一般常用的方法有以下几个内容
1>相对于点
- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
大体的含义:转换一个点从接收者坐标系到给定的视图坐标系
就是以fromView自身的坐标系的一个点的位置,假如现在以toView自身的坐标系为参考,此时这个点的位置坐标是多少.
参数:
CGPoint
一个在调用者坐标系中的点
view
一个包含了需要被转换的点的视图。如果视图是nil,那么这个方法将会转换成基于窗口的坐标。否则视图和接收者都要属于同一个UIWindow对象。
返回值
基于视图的坐标系转换过的点
注意:
1、如fromView是nil,则返回CGrectZero。
这种情况发生在view的init方法中;
[self.superView convertPoint:aPoint toView:toView];
此时的self.superView是nil。 2、如果toView是nil则相当于:
[fromView convertPoint:aPoint toView:selfView.window];
所以如果要将坐标转为相对于窗口的坐标,则只要如下就可以了: [fromView convertPoint:aPoint toView:nil];
3、fromView和toView还没有放到一个view中去,也就是没有对它们执行addSubview方法,此时它们的superView是nil。这种情况一定要小心了, 尽量不要这么作,因为view还没有建立明确的相对坐标系,这时cocoa框架一定很抓狂,作了很多假设,一般是以创建fromView和toView的那个view作为superView来处理的,但是并不确定
- (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
2>相对于矩形区域
- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
大体的含义:转换接收者坐标系中的矩形到其他视图
就是以fromView为坐标系的一个矩形位置,假如现在以toView自身的坐标系为参考,此时这个矩形的矩形位置是多少.
参数
rect
一个在视图坐标系中的矩形
view
一个视图内部有矩形在他的坐标系中。如果视图是nil,那么这个方法将会基于窗口来转换。否则视图和接收者必须都属于同一个UIWindow对象
返回值
The converted rectangle
转换过的矩形
- (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;
3>判断包含重叠的代码如下:
CGRectContainsRect(<#CGRect rect1#>, <#CGRect rect2#>)
判断rect1和rect2是否有重叠
CGRectContainsPoint(<#CGRect rect#>, <#CGPoint point#>)
判断point是不是在rect上
CGRectIntersectsRect(<#CGRect rect1#>, <#CGRect rect2#>)
判断rect1是否包含了rect2