作者:拍友2502882547 | 来源:互联网 | 2023-05-17 08:17
默认情况下,
frame
是以父控件左上角为坐标原点
;
转换坐标系
:
可以转换坐标系原点
,
改变
frame
的参照点
UIView *blue = [[UIViewalloc]init];
blue.backgroundColor = [UIColorblueColor];
blue.frame = CGRectMake(0,50,100,100);
[self.viewaddSubview:blue];
// 红色
UIView *red = [[UIViewalloc]init];
red.backgroundColor = [UIColorredColor];
red.frame = CGRectMake(100,150,100,100);
[self.viewaddSubview:red];
// 计算self.red在其他控件中的位置和尺寸
CGRect newRect = [red convertRect:CGRectMake(50,50,50,50) toView:blue];
// 以字符串的形式打印转换完的坐标
NSLog(@"%@",NSStringFromCGRect(newRect));
结果打印:
CGRect
newFrame = [from
convertRect
:from.
bounds
toView
:window];
等价于
CGRect
newFrame = [from.superview convertRect:from.frame toView:window];
等价于:toView写成nil(空)就是window
CGRect
newFrame = [from
convertRect
:from.
bounds
toView
:window];
self
.
containerView
.
y
=
CGRectGetMaxY
(newFrame);
self
.
containerView
.
centerX
=
CGRectGetMidX
(newFrame);
原理:左边的from和右
边的windows相差多少,from的bounds就加上多少