UIView中坐标转换中convertRect:toView与convertRect:fromView的关系

在storyboard中创建三个view,层级关系看下图
这里写图片描述
具体坐标如下图,一个小方格代表50
这里写图片描述

CGRect newRect = [self.view convertRect:self.blueView.frame fromView:self.redView];
相等于:
 CGRect newRect = [self.redView convertRect:self.blueView.frame toView:self.view];
打印结果都为:{{200, 250}, {50, 50}}
上面的两行代码都表示:算出在红色控件里的蓝色控件在控制器view中的位置(其实就是算x和y的值,因为宽高不变)
CGRect newRect = [self.view convertRect:self.blueView.bounds fromView:self.redView];
相等于:
CGRect newRect = [self.redView convertRect:self.blueView.bounds toView:self.view];
打印结果都为:{{100, 200}, {50, 50}}
上面的一个是self.blueView.frame,一个是self.blueView.bounds,
* 这样写也表明了frame和bounds的区别:frame表示的是在父控件中的位置和大小,bounds表示的是以自身为坐标原点的位置和大小。
CGRect newRect = [self.view.window convertRect:self.blueView.bounds fromView:self.redView];
相等于:
CGRect newRect = [self.redView convertRect:self.blueView.bounds toView:nil];
打印结果都为:{{100, 200}, {50, 50}}
注意:这里传nil和传self.view.window是一样的
CGRect newRect = [self.blueView convertRect:CGRectMake(10, 10, 20, 20) toView:self.greenView];
相等于:
 CGRect newRect = [self.greenView convertRect:CGRectMake(10, 10, 20, 20) fromView:self.blueView];

打印结果都为:{{210, 160}, {20, 20}}

猜你喜欢

转载自blog.csdn.net/u012581760/article/details/80249315