大部分內(nèi)容轉(zhuǎn)自
http://greenchiu.github.io/blog/2014/09/01/memo-the-uiview-convertrect/
如下兩個方法的區(qū)別:
convertRect:fromView:
convertRect:toView:
-
舉個例子:
當(dāng)碰到需要將一個BView
中的是一個CView
位置(CView's frame)
鸠珠,要被轉(zhuǎn)移到另一個AView
上的實惠超全,要讓視覺上的位置保持不變酵颁,配合下面的圖片來服用麸恍。
圖中有三個View
分別為A
,B
隐孽,C
B
是A
的subView
侠草,
C
是B
的subView
窍霞,
這時我們要將C
轉(zhuǎn)移到A
,
參考下圖(我先把B
隱藏起來)
這時就可以使用convertRect:toView:
來取得新的frame給C
newFrame = [viewB convertRect:viewC.frame toView:viewA];
在將
C
直接轉(zhuǎn)移到A
后(C
是A
的subView
)啊央,我們想把B
加入到C
里面眶诈,視覺位置依然保持不變,這時B
的frame
是對應(yīng)A
的瓜饥,想要取得B在C應(yīng)該有的位置逝撬,就使用convertRect:fromView
newFrame = [viewC convertRect:viewB.frame fromView:viewA];
以下是一些常用的轉(zhuǎn)換方法:
// 將像素point由point所在視圖轉(zhuǎn)換到目標(biāo)視圖view中,返回在目標(biāo)視圖view中的像素值
- (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
// 將像素point從view中轉(zhuǎn)換到當(dāng)前視圖中压固,返回在當(dāng)前視圖中的像素值
- (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;
// 將rect由rect所在視圖轉(zhuǎn)換到目標(biāo)視圖view中球拦,返回在目標(biāo)視圖view中的rect
- (CGRect)convertRect:(CGRect)rect toView:(UIView *)view;
// 將rect從view中轉(zhuǎn)換到當(dāng)前視圖中,返回在當(dāng)前視圖中的rect
// 例如把UITableViewCell中的subview(btn)的frame轉(zhuǎn)換到VC中
- (CGRect)convertRect:(CGRect)rect fromView:(UIView *)view;
例如:controllerA中有一個UITableView帐我,UITableView里有多行UITableVieCell坎炼,cell上放有一個button
// 在controllerA中實現(xiàn):
CGRect rc = [cell convertRect:cell.btn.frame toView:self.view];
或者
CGRect rc = [self.view convertRect:cell.btn.frame fromView:cell];