十分鐘了解核心動畫(Swift版)

核心動畫(Core Animation)

CAAnimation繼承結(jié)構(gòu)

核心動畫
  • 注意:上圖中的黑色虛線代表”繼承”某個類哪工,紅色虛線代表“遵守”某個協(xié)議

  • 四大類
    1.CABasicAnimation:基礎(chǔ)動畫

2.CAAnimationGroup:組動畫

3.CAKeyframeAnimation:關(guān)鍵幀動畫

4.CATransition:轉(zhuǎn)場動畫

注:Core Animation是直接作用在CALayer上的,并非UIView

CAAnimation屬性介紹

  • duration:動畫的持續(xù)時間
  • repeatCount:動畫的重復(fù)次數(shù)
  • repeatDuration:動畫的重復(fù)時間
  • removedOnCompletion:默認為YES煤禽,代表動畫執(zhí)行完畢后就從圖層上移除沐鼠,圖形會恢復(fù)到動畫執(zhí)行前的狀態(tài)徽惋。如果想讓圖層保持顯示動畫執(zhí)行后的狀態(tài)回怜,那就設(shè)置為NO距辆,不過還要設(shè)置fillMode為kCAFillModeForwards
  • fillMode:決定當(dāng)前對象在非active時間段的行為.比如動畫開始之前,動畫結(jié)束之后
  • beginTime:可以用來設(shè)置動畫延遲執(zhí)行時間翘紊,若想延遲2s蔽氨,就設(shè)置為CACurrentMediaTime()+2,CACurrentMediaTime()為圖層的當(dāng)前時間
  • timingFunction:速度控制函數(shù)帆疟,控制動畫運行的節(jié)奏
    • kCAMediaTimingFunctionLinear(線性):勻速鹉究,給你一個相對靜態(tài)的感覺

    • kCAMediaTimingFunctionEaseIn(漸進):動畫緩慢進入,然后加速離開

    • kCAMediaTimingFunctionEaseOut(漸出):動畫全速進入鸯匹,然后減速的到達目的地

    • kCAMediaTimingFunctionEaseInEaseOut(漸進漸出):動畫緩慢的進入坊饶,中間加速,然后減速的到達目的地殴蓬。這個是默認的動畫行為匿级。

CABasicAnimation

  • 效果圖


    CABasicAnimation.gif
  • 代碼

import UIKit

 class ViewController: UIViewController {

    var layer :CALayer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.addSubview(redView)
        layer = redView.layer
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        
        let basicAni = CABasicAnimation()
        basicAni.keyPath = "position.x"
        //      basicAni.fromValue = (10) // 從哪
        //            basicAni.toValue = (300) // 到哪
        //        basicAni.duration = 4 //動畫執(zhí)行的時間,默認0.25
        basicAni.byValue = (10); // 在自身的基礎(chǔ)上累加
        // 不希望核心動畫回到原來的位置
        basicAni.fillMode = kCAFillModeForwards;
        basicAni.removedOnCompletion = false;
        
        self.layer?.addAnimation(basicAni, forKey: nil)
        print(self.redView.frame.origin.x)
    }
    //懶加載redView
    lazy var redView : UIView = {
    
        let redView = UIView(frame:CGRectMake(100, 100, 100, 100))
        redView.backgroundColor = UIColor.redColor()
        
        return redView
    }()
}
由打印結(jié)果可看出雖然redView的layer的frame在變化染厅,但redView的沒變

CAKeyframeAnimation

  • 效果
keyFrameAnimation.gif
  • 代碼
import UIKit

class ViewController: UIViewController {

    var layer :CALayer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.addSubview(redView)
        layer = redView.layer
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   
        let keyframeAni = CAKeyframeAnimation()
        
        keyframeAni.keyPath = "position";
        
        //創(chuàng)建路徑
        let path = UIBezierPath(ovalInRect: CGRectMake(100, 100, 160, 160))

        keyframeAni.path = path.CGPath
        
        keyframeAni.duration = 2
        
        keyframeAni.repeatCount = 300
        
        self.layer?.addAnimation(keyframeAni, forKey: nil)
        
    }
 
    
    //懶加載redView
    lazy var redView : UIView = {
    
        let redView = UIView(frame:CGRectMake(100, 100, 30, 30))
        redView.backgroundColor = UIColor.redColor()
        
        return redView
    }()
}
  • CAAnimationGroup

  • 演示


    group.gif
  • 代碼

 import UIKit

 class ViewController: UIViewController {

    var layer :CALayer?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.addSubview(redView)
        layer = redView.layer
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
 

        let group = CAAnimationGroup()
        
        let keyframeAni = CAKeyframeAnimation()
        
        keyframeAni.keyPath = "position"
        
        let path = UIBezierPath(arcCenter:CGPointMake(200, 200) , radius: 80, startAngle: 0, endAngle: CGFloat(2.0 * M_PI), clockwise: true)
        
        keyframeAni.path = path.CGPath
        
        let basicAni = CABasicAnimation()
        
        basicAni.keyPath = "transform.rotation"
        
        basicAni.byValue = (M_PI * 2 * 3)
        
        group.animations = [keyframeAni,basicAni]
        
        group.duration = 3
        
        group.repeatCount = Float(INT_MAX)
        
        self.layer?.addAnimation(group, forKey: nil)
        
    }
 
    
    //懶加載redView
    lazy var redView : UIView = {
    
        let redView = UIView(frame:CGRectMake(100, 100, 30, 30))
        redView.backgroundColor = UIColor.redColor()
        
        return redView
     }()
    }
  • CATransition

  • type屬性

type
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痘绎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肖粮,更是在濱河造成了極大的恐慌孤页,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩馆,死亡現(xiàn)場離奇詭異行施,居然都是意外死亡,警方通過查閱死者的電腦和手機魂那,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門蛾号,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涯雅,你說我怎么就攤上這事鲜结。” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵精刷,是天一觀的道長拗胜。 經(jīng)常有香客問我,道長怒允,這世上最難降的妖魔是什么埂软? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮纫事,結(jié)果婚禮上仰美,老公的妹妹穿的比我還像新娘。我一直安慰自己儿礼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布庆寺。 她就那樣靜靜地躺著蚊夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪懦尝。 梳的紋絲不亂的頭發(fā)上知纷,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音陵霉,去河邊找鬼琅轧。 笑死,一個胖子當(dāng)著我的面吹牛踊挠,可吹牛的內(nèi)容都是我干的乍桂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼效床,長吁一口氣:“原來是場噩夢啊……” “哼睹酌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剩檀,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤憋沿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沪猴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辐啄,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年运嗜,在試婚紗的時候發(fā)現(xiàn)自己被綠了壶辜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡洗出,死狀恐怖士复,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤阱洪,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布便贵,位于F島的核電站,受9級特大地震影響冗荸,放射性物質(zhì)發(fā)生泄漏承璃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一蚌本、第九天 我趴在偏房一處隱蔽的房頂上張望盔粹。 院中可真熱鬧,春花似錦程癌、人聲如沸舷嗡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽进萄。三九已至,卻和暖如春锐峭,著一層夾襖步出監(jiān)牢的瞬間中鼠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工沿癞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留援雇,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓椎扬,卻偏偏與公主長得像惫搏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蚕涤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 在iOS實際開發(fā)中常用的動畫無非是以下四種:UIView動畫晶府,核心動畫,幀動畫钻趋,自定義轉(zhuǎn)場動畫川陆。 1.UIView...
    請叫我周小帥閱讀 3,078評論 1 23
  • 一、UIKit動畫 第一種寫法是利用屬性蛮位,結(jié)合beginAnimations较沪、commitAnimations 第...
    Gary_Tseng閱讀 961評論 1 3
  • Core Animation Core Animation,中文翻譯為核心動畫失仁,它是一組非常強大的動畫處理API尸曼,...
    45b645c5912e閱讀 3,016評論 0 21
  • 在iOS中隨處都可以看到絢麗的動畫效果,實現(xiàn)這些動畫的過程并不復(fù)雜萄焦,今天將帶大家一窺ios動畫全貌控轿。在這里你可以看...
    每天刷兩次牙閱讀 8,465評論 6 30
  • 在iOS中隨處都可以看到絢麗的動畫效果冤竹,實現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌茬射。在這里你可以看...
    F麥子閱讀 5,094評論 5 13