iOS動畫系列之五:基礎動畫之縮放篇&旋轉篇Swift+OC

這一篇主要介紹基礎動畫之縮放和旋轉。這些基本操做分享完以後,我想一想能夠找個稍微複雜一點點的動畫作作啦。git

這篇繼續基礎篇,分享一下縮放和旋轉。由於總體思路和平移基本上沒有變化,加上源代碼裏面也有OC版本的。因此我們此次以swift爲例來寫一寫。swift

爲了可以更明顯的看到效果,因此加了幾個UILabel用來標示。實際開發中最好不要用我這種方法,就是偷個懶。用frame的時候還須要考慮屏幕適配問題,就有點麻煩了。bash

1. 思路和最終成果

最終的成果:學習

BasicAnimation.gif
BasicAnimation.gif

思惟導圖:動畫

基礎動畫.png
基礎動畫.png

2. 抽取公共方法

由於須要頻繁建立CALayer還有實例化動畫,因此無論在OC中仍是Swift中都抽取一下公共的方法用來偷懶。哈哈~這就是本宅胖愈來愈發福的緣由。ui

這裏使用了extension的方式,在代碼少的時候看不出來優點。代碼多了有事就很是明顯了,最大的好處就是能夠很容易快速定位到代碼區域。spa

extension的做用之一就是能夠很清晰的區分出各個func。
.net

使用extension區分代碼
使用extension區分代碼

靜態截取圖:是否是很清晰?
3d

Paste_Image.png
Paste_Image.png

2.1 抽取建立CALayer的公共方法

//    建立calayer
    fileprivate func createLayer (position: CGPoint, backgroundColor: UIColor) -> CALayer {
        //建立calayer
        let layer = CALayer()
        //設置位置和大小
        layer.position = position
        layer.bounds = CGRect(x: 0, y: 0, width: 100, height: 100)
        //設置背景顏色
        layer.backgroundColor = backgroundColor.cgColor
        //把layer添加到UIView的layer上
        self.view.layer.addSublayer(layer)

        return layer
    }複製代碼

2.2 抽取建立動畫的公共方法

這裏要把keyPath抽取出來的緣由也是由於偷懶,由於無論是旋轉動畫仍是縮放動畫,都須要使用這個屬性。因此抽取出來一個公共的方法,就能夠兩種動畫共用一個啦。是否是懶到家了?指針

關於keyPath的字段有啥做用,能夠看看第三篇:iOS動畫系列之三:Core Animation。介紹了Core Animation的經常使用屬性和方法。

4.3 animationWithKeyPath中,經常使用的keyPath

這個裏面有詳細的說明。

代碼以下:

//建立基礎Animation
    fileprivate func createAnimation (keyPath: String, toValue: CGFloat) -> CABasicAnimation {
        //建立動畫對象
        let scaleAni = CABasicAnimation()
        //設置動畫屬性
        scaleAni.keyPath = keyPath

        //設置動畫的起始位置。也就是動畫從哪裏到哪裏。不指定起點,默認就從positoin開始
        scaleAni.toValue = toValue

        //動畫持續時間
        scaleAni.duration = 2;

        //動畫重複次數
        scaleAni.repeatCount = Float(CGFloat.greatestFiniteMagnitude)

        return scaleAni;
    }複製代碼

3. 懶加載Layer

懶加載的目的是爲了在View實例化的時候不進行建立,用的時候才進行建立。這樣能夠必定程度上提升效率。

// 懶加載縮放的layer
    private lazy var redLayer: CALayer = {
        let layer = self.createLayer(position: CGPoint(x: 125, y: 150), backgroundColor: UIColor.red)

        return layer
    }()複製代碼

4. 添加動畫

在這裏就可以體現出來抽取公共方法的好處了吧。調用一下,傳幾個參數就行了。輕鬆,簡單,還有easy!

4.1 添加縮放動畫

//        添加縮放的動畫
        redLayer.add(createAnimation(keyPath: "transform.scale.x", toValue: 0.5), forKey: nil)

        blueLayer.add(createAnimation(keyPath: "transform.scale.y", toValue: 0.5), forKey: nil)

        grayLayer.add(createAnimation(keyPath: "transform.scale.z", toValue: 0.5), forKey: nil)

        greenLayer.add(createAnimation(keyPath: "transform.scale", toValue: 0.5), forKey: nil)複製代碼

4.2 添加旋轉動畫

//        添加旋轉的動畫
        redRotationLayer.add(createAnimation(keyPath: "transform.rotation.x", toValue: CGFloat(M_PI_4)), forKey: nil)

        blueRotationLayer.add(createAnimation(keyPath: "transform.rotation.y", toValue: CGFloat(M_PI_4)), forKey: nil)

        grayRotationLayer.add(createAnimation(keyPath: "transform.rotation.z", toValue: CGFloat(M_PI_4)), forKey: nil)複製代碼

今天就到這裏啦,枯燥無味的CABasicAnimation基礎部分終於分享完了。下一篇能夠嘗試使用CABasicAnimation作點好玩的東東。

喜歡的話就點個讚唄,或者賞俺點口糧。麼麼噠~愛大家~

OC和Swift的下載地址以下:
git.oschina.net/atypical/CA…

iOS實踐:CABasic-Animation(OC和Swift兩版)

-----------------------華麗分割線,iOS動畫系列全集連接-------------------------------------------------
第一篇:iOS動畫系列之一:經過實戰學習CALayer和透視的原理。作一個帶時分秒指針的時鐘動畫(上)
第二篇:iOS動畫系列之二:經過實戰學習CALayer和透視的原理。作一個帶時分秒指針的時鐘動畫。包含了OC和Swift兩種源代碼(下)
第三篇:iOS動畫系列之三:Core Animation。介紹了Core Animation的經常使用屬性和方法。
第四篇:CABasic Animation。iOS動畫系列之四:基礎動畫之平移篇
第五篇:CABasic Animation。iOS動畫系列之五:基礎動畫之縮放篇&旋轉篇
第六篇:iOS動畫系列之六:利用CABasic Animation完成帶動畫特效的登陸界面
第七篇:iOS動畫系列之七:實現相似Twitter的啓動動畫
第八篇:iOS動畫系列之八:使用CAShapeLayer繪畫動態流量圖
第九篇:iOS動畫系列之九:實現點讚的動畫及播放起伏指示器
第十篇:實戰系列:繪製過山車場景

相關文章
相關標籤/搜索