轉載自:http://blog.csdn.net/ronaldo_carry/article/details/49070119數組
將viewdidload裏面的代碼所有註釋掉less
- (void)viewDidLoad {函數
[superviewDidLoad];動畫
}this
重寫點擊交換的事件方法url
//交換視圖.net
- (IBAction)changeBtn {翻譯
//經過類方法來建立轉場動畫指針
CATransition *transition = [CATransitionanimation];對象
transition.duration = 1.0f;//動畫的間隔爲1S
//設置動畫的變化方法
transition.timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
//下面是交換視圖特有的屬性
//私有API 使用私有API的時候要慎重(這個是蘋果官網認可的)
transition.type = @"pageCurl";
// transition.type =@"fade";fade漸隱
//type的子類型 轉換的方向
transition.subtype = @"fromRight";
// //這裏也能夠寫成這樣 效果是同樣的
// transition.subtype = kCATransitionFromRight;
//設置具體的動畫 交換兩個視圖的位置
[_aninmationViewexchangeSubviewAtIndex:0withSubviewAtIndex:1];
//給圖層添加動畫
[_aninmationView.layeraddAnimation:transitionforKey:@"myAnimation"];
}
這樣運行出來的效果是 點擊了交換按鈕 出來動畫翻頁效果 可是始終展示的是最上面的view 並不會實現預期的交換兩個view的效果
查看了一下這個函數的官方文檔
- (void)addAnimation:(CAAnimation *)anim forKey:(nullableNSString *)key;
咱們能夠看到文檔中是這麼解釋的:
/** Animation methods. **/
/* Attach an animation object to the layer. Typically this is implicitly
* invoked through an action that is an CAAnimation object.
*
* 'key' may be any string such that only one animation per unique key
* is added per layer. The special key 'transition' is automatically
* used for transition animations. The nil pointer is also a valid key.
*
* If the `duration' property of the animation is zero or negative it
* is given the default duration, either the value of the
* `animationDuration' transaction property or .25 seconds otherwise.
*
* The animation is copied before being added to the layer, so any
* subsequent modifications to `anim' will have no affect unless it is
* added to another layer. */
翻譯過來就是:
/** Animation methods. **/ 動畫方法
/* 給圖層(layer)附加上一個動畫對象 一般這是隱式的經過一個動做,這個動做是一個CAAnimation對象來調用.
* 'key'鍵多是任意的string,這樣每一個惟一的鍵只有一個動畫(animation)被添加到圖層(layer)中.特殊的鍵'transition'會被自動用於轉場動畫中,空指針一樣也是一個空的鍵值.
*若是動畫的持續時間(duration)屬性是0或者負,則給定默認時間,或者是轉換屬性`animationDuration'的值,不然的話0.25S.
* 動畫(animation)被添加到圖層(layer)以前已經被複制(copied),因此任何後續對'anim'動畫修改都不會有影響,除非它被添加到另外一個圖層(layer)中 /*這句話有點鬱悶 沒怎麼理解他說的意思*/
**/
組動畫:
-(void)animationGroup{
CAAnimationGroup *animG = [CAAnimationGroup animation];
//2.添加動畫到動畫數組animation groups中
animG.animations = @[anim1,anim2];
//4.添加動畫到圖層上
[self.navigationController.view.layer addAnimation:animG forKey:@"animG"];
}
而後就會依次執行組動畫裏的動畫了