如你所知阁簸,iOS中坐標(biāo)系轉(zhuǎn)換苏揣,需要使用以下兩個系統(tǒng)API仔戈。
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
本文將詳細(xì)講述兩個API的具體使用方法及含義吆寨。
-
convertRect: fromView:
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
// 轉(zhuǎn)換viewB坐標(biāo)系內(nèi)區(qū)域rect赏淌,在viewA坐標(biāo)系中的區(qū)域。
CGRect rect = viewB.bounds;
CGRect result = [viewA convertRect:rect fromView:viewB];
viewB坐標(biāo)系內(nèi)區(qū)域rect啄清,在viewA坐標(biāo)系中的區(qū)域六水。
上述方法rect取的是viewB.bounds的值,因此又可以描述為:
viewB在viewA內(nèi)部坐標(biāo)系中的區(qū)域辣卒。
-
convertRect: toView:
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
// 轉(zhuǎn)換viewA坐標(biāo)系內(nèi)區(qū)域rect掷贾,在viewB坐標(biāo)系中的區(qū)域。
CGRect rect = viewA.bounds;
CGRect result = [viewA convertRect:rect toView:viewB];
上述方法rect取的是viewA.bounds的值荣茫,因此又可以描述為:
viewA在viewB內(nèi)部坐標(biāo)系中的區(qū)域想帅。
-
常見誤區(qū)
rect 參數(shù)的使用經(jīng)常會出現(xiàn)錯誤:
CGRect result_false = [viewA convertRect:viewA.frame toView:viewB]; 錯誤:?
CGRect result_right = [viewA convertRect:viewA.frame toView:viewB]; 正確:?
result_false 為,viewA坐標(biāo)系中frame位置啡莉,應(yīng)設(shè)在viewB坐標(biāo)系中的區(qū)域港准。
相對result_right 來說旨剥,result_false的origin會附加viewA.frame.origin的值。