- (CGPoint)convertPoint:(CGPoint)point toView:(nullable UIView *)view;
- (CGPoint)convertPoint:(CGPoint)point fromView:(nullable UIView *)view;
- (CGRect)convertRect:(CGRect)rect toView:(nullable UIView *)view;
- (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)view;
主要是用來自動(dòng)計(jì)算不同層級(jí)下的CGPoint梗肝,UIView之間的坐標(biāo)轉(zhuǎn)換巫击。
例子:
CGRect rec = [self.view convertRect:self.yellowView.frame? fromView:self.greyView];
NSLog(@"%@",NSStringFromCGRect(rec));
這句代碼的意思是灰色View中的黃色View相對(duì)于self.view中的位置
CGRect newRect = [self.yellowView convertRect:CGRectMake(50, 50, 20, 20) toView:self.blueView];
這句代碼的意思是在黃色View中坝锰,定義一個(gè)相對(duì)于黃色View(50重付,50),大小為(20弓颈,20)的View删掀,這個(gè)View相對(duì)于藍(lán)色View的位置
需要注意的是:ToView是可以傳nil的
CGRect newRect = [self.yellowView convertRect:CGRectMake(50, 50, 20, 20) toView:nil];
這句代碼的意思是在黃色View中披泪,定義一個(gè)目標(biāo)區(qū)域,該區(qū)域相對(duì)于window的位置(nil代表的是self.view.window
下面來展示三個(gè)方法如何做到黃色View在Window中的位置
前兩種(ToView)
CGRect newRect = [self.yellowView convertRect:self.yellowView.bounds toView:nil];
CGRect newRect = [self.greyView convertRect:self.yellowView.frame toView:nil];
這樣也正好表明了frame和bounds的區(qū)別控硼,第一段代碼表示,在yellowView中佩厚,有個(gè)
和yellowView一樣的大小的區(qū)域bounds说订,此區(qū)域相對(duì)于window的位置,而第二段代碼
表示钙姊,在greyView中埂伦,其子視圖yellowView的frame區(qū)域,相對(duì)于window的位置
第三種(FromView)
CGRect rec1 = [self.view.window convertRect:self.yellowView.bounds fromView:self.yellowView];
總結(jié):
toView就是從左往右開始讀代碼膊毁,也是從左往右理解意思
fromView就是從右往左開始讀代碼基跑,也是從右往左理解意思
- A(CGPoint)convertPoint:B(CGPoint)point toView:C(nullable UIView *)view;
- A(CGPoint)convertPoint:B(CGPoint)point fromView:C(nullable UIView *)view;
第一句代表
A區(qū)域里面有個(gè)坐標(biāo)B,需要把相對(duì)于A的坐標(biāo)B轉(zhuǎn)換成相對(duì)于C的坐標(biāo)
第二句代表
從C區(qū)域里面轉(zhuǎn)換坐標(biāo)B媳否,需要把相對(duì)于C的坐標(biāo)轉(zhuǎn)換成相對(duì)于A的坐標(biāo)
理解下用起來真的蠻不錯(cuò)哦