[Memo] 關於 UIView convertRect

來記錄一下前幾天 Allen 問了我 UIView 兩個 method

  • convertRect:fromView:
  • convertRect:toView:

有什麼差異, 該如何使用的問題.

舉個例子:

當碰到需要將一個 B view 中的是一個 C View 位置(C view ‘s frame), 要被轉移到另一個 A view 上的時候, 要讓視覺上的位置保持不變.

配合下面的圖片來服用~

途中有三個 View 分別為 A, B, C
B 是 A 的 subview,
C 是 B 的 subview,

這時我們要將 C 轉移到 A,
參考下圖 (我先把 B 隱藏起來)
這時就可以使用 convertRect:toView: 來取得新的 frame 給 C.

convertRect:toView:
1
2
newFrame = [viewB convertRect:viewC.frame toView:viewA];
...

在將 C 直接轉移到 A 後( C 是 A 的 subview ), 我們想把 B 加入到 C 裡面, 視覺位置依然保持不變

這時 B 的 frame 是對應 A 的, 想要取得 B 在 C 應該有的位置, 就使用 convertRect:fromView:

convertRect:fromView:
1
2
newFrame = [viewC convertRect:viewB.frame fromView:viewA];
...

最後的結果會跟下面一樣

這個兩個 method 使用到的時機主要就是保持視覺位置不變, 通常是做動態被使用到的機會會最大~

Comments