- (void)addAnimation:(CAAnimation *)anim forKey:(nullable NSString *)key; 方法淺析

轉載自: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"];

}

而後就會依次執行組動畫裏的動畫了

相關文章
相關標籤/搜索