現學習IOS開發,在看別人代碼時看到別人使用UIView中的exchangeSubviewAtIndex方法進行了視圖跳轉。花了點時間仔細學習了一下UIView中的視圖關系,可能對於很多人來說已經算是小兒科,但是希望能幫助到用到的人,下面把我學到的東西分享給大家。
exchangeSubviewAtIndex:withSubviewAtIndex: 首先必須的先看看官方文檔,
Exchanges the subviews at the specified indices.結合著方法調用時需要傳遞
的參數可以這樣很准確的翻譯,在指定一個子view集合中,交換兩個子view。
再看一下UIView的聲明,NSArray *subviews;這樣就不難理解了,對於UIView
就像一個大容器,裡面可以承載很多東西,你可以通過addSubview方法向UIView
中添加子View(子View也可以是UIView),當然可以覆蓋(後添加上來的視圖蓋
在先添加的視圖上面),而大容器UIView對象就會把你添加進來的子view統一存放
在subviews裡面進行管理,而子view也具有自己的索引index,IOS中索引也是從0
開始,第一個添加進來的view是index = 0;以後按照順序逐漸增加。這樣一想,對
於IOS開發中的視圖關系一下子就清楚了。這樣再去看
exchangeSubviewAtIndex:withSubviewAtIndex方法就變得好理解多了。
那麼很多人使用exchangeSubviewAtIndex:withSubviewAtIndex方法是進
行視圖跳轉的,其實從上面分析的結果來看也很是簡單了,在一個UIView
中添加視圖1、視圖2、視圖3,當前顯示的是視圖3,向要跳轉到視圖1,
只需要調用方法,把視圖1的索引和視圖3的索引傳入到方法中就可以完
成視圖的跳轉了。
有人會問了,子view的索引怎麼得到,我在浏覽帖子的時候發現有人說得
不到,臥槽,子view都是統一在subviews裡面管理的怎麼可能得不到呢。
得到的方法很簡單,subviews是NSArray對象,NSArray對象裡有個方法
indexOfObject,把你想要得到索引的子view對象傳過去就可以得到這個
view的索引了。子view視圖怎麼得到,定義成全局是一種方法,也可以
通過tag得到視圖(UIView中的一個方法 viewWithTag,這個方法類似於
Android中的findViewByI'd),當然事先你得為子view設置tag了。
exchangeSubviewAtIndex:withSubviewAtIndex方法是完成視圖跳轉的沒錯
,其實大部分是完成那麼有動畫效果的視圖跳轉,就像以前學習Android時
對於IOS上的立體翻轉動畫效果很是崇拜,在IOS上很簡單,廢話不多說了。
上代碼:
[UIViewbeginAnimations:@"animationID"context:nil];//開始一個動畫塊,第一個參數為動畫塊標識
[UIViewsetAnimationDuration:1.5f];//設置動畫的持續時間
//設置動畫塊中的動畫屬性變化的曲線,此方法必須在beginAnimations方法和commitAnimations,默認即為UIViewAnimationCurveEaseInOut效果。詳細請參見UIViewAnimationCurve
[UIViewsetAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIViewsetAnimationRepeatAutoreverses:NO];//設置是否自動反轉當前的動畫效果
//設置過渡的動畫 效果,此處第一個參數可使用5種動畫效果
[UIViewsetAnimationTransition:UIViewAnimationTransitionFlipFromLeftforView:self.viewcache:YES];
//設置完成後啟動跳轉方法
[self.viewexchangeSubviewAtIndex:1withSubviewAtIndex:2];
[UIViewcommitAnimations];//提交動畫