Animation:CABasicAnimation動畫實例總結(動畫篇一)

總結內容

1. 掌握UIView顯示層動畫和CALayer內容層動畫區(qū)別

2. 理解Core Animation核心動畫架構

3. CALayer內容層動畫合集

內容層動畫具有和顯示層動畫類似的初級動畫效果秒咐,但除此之外,其利用內容層的一些特殊屬性還可以實現(xiàn)各種高級的效果 比如環(huán)形動畫 , 圓角動畫等蕴纳。

1. UIView 和 CALayer 的區(qū)別(當然他們兩個的區(qū)別遠不止這些 以下是比較突出的區(qū)別)

- UIView 繼承自UIResponder 因此UIView是可以處理響應事件的盆赤,而CALayer繼承自NSObject, 所以它只負責內容的創(chuàng)建 和繪制霉祸。
- UIView負責對內容的管理脐湾, CALayer負責內容的繪制
- UIView中的位置屬性只有frame , bounds , center, 而CALayer除了具備這些屬性之外還有anchorPoint , position

2.Core Animation 核心動畫

Core Animation為IOS核心動畫 它提供了一組豐富的API可以用于制作各種高級動畫。Core Animation來自QuartzCore.framework框架 它具有以下特點

1 . 直接作用于CALayer圖層上捧韵,而非UIView上市咆;
2 . Core Animation的執(zhí)行過程在后臺執(zhí)行,不阻塞主線程再来;
3 . 可以利用CALayer絕大多數數學制作高級動畫效果蒙兰;

下面來看看CoreAnimation 下各種常用動畫類的繼承關系 如下

截屏2020-08-22 上午11.50.11.png

3.CALayer 層動畫使用實例 我把代碼也貼出來了自測了一下是沒多大毛病的;

    var loginBtn : UIButton?
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = UIColor.white
        // Do any additional setup after loading the view.
        /**
         Core Animation CABasicAnimation 核心動畫
         */
        loginBtn = UIButton(frame: CGRect(x: 20, y: 230, width: self.view.frame.width-20*2, height: 50))
        loginBtn?.backgroundColor =  UIColor(red: 50/255.0, green: 185/255.0, blue: 170/255, alpha: 1.0)
        loginBtn?.setTitle("登陸", for: .normal);
        self.view.addSubview(loginBtn!)
    }

1. 移動動畫

         let animation:CABasicAnimation = CABasicAnimation()
                animation.keyPath = "position"
                if let btn = loginBtn {
                    let positionX:CGFloat = btn.frame.origin.x + 0.5 * btn.frame.size.width;
                    let positionY:CGFloat = btn.frame.origin.y + 0.5 * btn.frame.size.height + 100;
                    animation.toValue = NSValue(cgPoint: CGPoint(x: positionX, y: positionY))
                    animation.duration = 2.0
                    animation.fillMode  = .forwards
                    animation.isRemovedOnCompletion = false
                    loginBtn?.layer.add(animation, forKey: nil)
                }

2. 縮放動畫

                let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "transform.scale.x"
                animation.fromValue = 1.0
                animation.toValue = 0.8
                animation.duration = 3
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

3. 旋轉動畫

                let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "transform.rotation"
        //        animation.fromValue = 1.0
                animation.toValue = 3.14/2
                animation.duration = 3
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

4. 位移動畫

                let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "transform.translation.y"
                //        animation.fromValue = 1.0
                animation.toValue = 100
                animation.duration = 3
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

5. 圓角動畫

                let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "cornerRadius"
                //        animation.fromValue = 1.0
                animation.toValue = 15
                animation.duration = 2
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

6. 邊框動畫

                let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "borderWidth"
                //        animation.fromValue = 1.0
                animation.toValue = 10
                animation.duration = 3
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

7. 顏色漸變動畫

               let animation: CABasicAnimation =  CABasicAnimation()
                animation.keyPath  =  "backgroundColor"
                animation.fromValue = UIColor.green.cgColor
                animation.toValue = UIColor.red.cgColor
                animation.duration = 3
                animation.fillMode  = .forwards
                animation.isRemovedOnCompletion = false
                loginBtn?.layer.add(animation, forKey: nil)

8.淡入淡出動畫

        let animation: CABasicAnimation =  CABasicAnimation()
        animation.keyPath  =  "opacity"
        animation.fromValue = UIColor.green.cgColor
        animation.toValue = 1.0
        animation.duration = 3
        animation.fillMode  = .forwards
        animation.isRemovedOnCompletion = false
        loginBtn?.layer.add(animation, forKey: nil)

9. 陰影漸變動畫

       loginBtn?.layer.shadowColor = UIColor.red.cgColor
        loginBtn?.layer.shadowOpacity = 0.5
        let animation: CABasicAnimation =  CABasicAnimation()
        animation.keyPath  = "shadowOffset"
        animation.toValue =  NSValue(cgSize:CGSize(width: 10, height: 10))
        animation.duration = 3
        animation.fillMode  = .forwards
        animation.isRemovedOnCompletion = false
        loginBtn?.layer.add(animation, forKey: nil)

以上例子是CABasicAnimation的基本用法比較簡單 希望對大家有用芒篷!下次有時間在給大家總結一下CoreAnimation:CAKeyframeAnimation【關鍵幀動畫】 癞己, CAAnimation Croup 動畫的使用认烁!有問題的地方望大家指正氏淑。在此完結謝謝医窿!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市糊识,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摔蓝,老刑警劉巖赂苗,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贮尉,居然都是意外死亡拌滋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門猜谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來败砂,“玉大人赌渣,你說我怎么就攤上這事〔蹋” “怎么了坚芜?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斜姥。 經常有香客問我鸿竖,道長,這世上最難降的妖魔是什么铸敏? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任缚忧,我火速辦了婚禮,結果婚禮上杈笔,老公的妹妹穿的比我還像新娘闪水。我一直安慰自己,他們只是感情好桩撮,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布敦第。 她就那樣靜靜地躺著,像睡著了一般店量。 火紅的嫁衣襯著肌膚如雪芜果。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天融师,我揣著相機與錄音右钾,去河邊找鬼。 笑死旱爆,一個胖子當著我的面吹牛舀射,可吹牛的內容都是我干的。 我是一名探鬼主播怀伦,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼脆烟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了房待?” 一聲冷哼從身側響起邢羔,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎桑孩,沒想到半個月后拜鹤,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡流椒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年敏簿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡惯裕,死狀恐怖温数,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情轻猖,我是刑警寧澤帆吻,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站咙边,受9級特大地震影響猜煮,放射性物質發(fā)生泄漏。R本人自食惡果不足惜败许,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一王带、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧市殷,春花似錦愕撰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至音羞,卻和暖如春囱桨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗅绰。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工舍肠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窘面。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓翠语,卻偏偏與公主長得像,于是被迫代替她去往敵國和親财边。 傳聞我的和親對象是個殘疾皇子肌括,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345