UIView 視圖間坐標系轉(zhuǎn)換

如你所知,iOS中坐標系轉(zhuǎn)換,需要使用以下兩個系統(tǒng)API。

- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

本文將詳細講述兩個API的具體使用方法及含義。

  • convertRect: fromView:

- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;

// 轉(zhuǎn)換viewB坐標系內(nèi)區(qū)域rect,在viewA坐標系中的區(qū)域。
CGRect rect = viewB.bounds;
CGRect result = [viewA convertRect:rect fromView:viewB];

viewB坐標系內(nèi)區(qū)域rect,在viewA坐標系中的區(qū)域。
上述方法rect取的是viewB.bounds的值,因此又可以描述為:
viewB在viewA內(nèi)部坐標系中的區(qū)域。
  • convertRect: toView:

- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;

// 轉(zhuǎn)換viewA坐標系內(nèi)區(qū)域rect,在viewB坐標系中的區(qū)域。
CGRect rect = viewA.bounds;
CGRect result = [viewA convertRect:rect toView:viewB];
上述方法rect取的是viewA.bounds的值,因此又可以描述為:
viewA在viewB內(nèi)部坐標系中的區(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坐標系中frame位置,應設在viewB坐標系中的區(qū)域。
相對result_right 來說,result_false的origin會附加viewA.frame.origin的值。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容