天天看點

CAAnimation簡介

在開發過程中,适當的動畫效果能讓增強app表現力,使互動不在那麼生硬,變得流暢。做動畫,當然少不了CAAnimation了。

CAAnimation 是一個抽象類,它準守了CAMediaTiming 和 CAAction 協定。在Objective-c中,抽象類不能被直接使用。隻會使用繼承與該類的子類。

使用過程中CAAnimation常用的子類有 CABasicAnimation, CAKeyframeAnimation, CAAnimationGroup, CATransition 和 CASpringAnimation。

其中繼承關系如下圖:

CAAnimation簡介

添加動畫

給視圖添加動畫,通過把 CAAnimation 添加到 視圖的layer上。

如:

添加完成後,動畫會立即執行。其中 key 是我們自己定義的,用來區分不同的動畫。

動畫的執行與結束

給動畫設定delegate,通過下面兩個代理方法,我們可以擷取到動畫開始和結束的動作。

//動畫開始
- (void)animationDidStart:(CAAnimation *)aim;

//動畫結束(包括動畫的完成和未完成但被從layer上移除,其中flag是用來區分兩者的。如果flag為true,代表是已經完成)
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag;

           

在界面有多個CAAnimation的時候,我們就可以通過key去區分不同的動畫。

如:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{

    if ([[self.view.layer animationForKey:@"FirstAnimation"] isEqual:anim] && flag) {
        // do something
    }
}
           

另外補充一下手動移除動畫:

[self.view.layer removeAllAnimations];//移除所有動畫
[self.view.layer removeAnimationForKey:@"FirstAnimation"];//移除某個動畫
           

以上就是CAAnimation的基本知識,後面會對每個子類單獨進行解析。