iOS CoreAnimation核心動畫總結
一些日常的動畫練習

封面配圖.jpeg
//動畫演示...

HDRadarWave.gif
iOS版動畫
UIView與CALayer的關係:首先CALayer從NSObject繼承,不具備響應,而UIView從UIResponder繼承,可以對事件做出響應,UIView主要是對現實內容的管理,而CALayer主要是對現實顯示內容的繪製,當我們建立一個UIView的物件時,系統自動為我們建立一個CALayer的物件,也就是UIView的的層屬性,層用來繪製和渲染圖形,UIView的本身不具備顯示的功能,我們實際所能看到的內容是由層所呈現通過層物件可以很方便地調整的UIView的一些介面屬性,比如:陰影,圓角大小,邊框寬度和顏色等
核心動畫:
CAAnimation類及其子類:CAAnimation是QuartzCore框架下的遵約CAMediaTiming協議和CAAction協議的抽象類,平時動畫所使用的是它的一些子類,結構關係如下:

pngCAAnimationTRee.png
CAMediaTiming協議中定義了速度,時間,重複次數等,屬性如下:
////物件的開始時間,相對於其父物件 //public var beginTime: CFTimeInterval { get set } ////物件的基本持續時間 //public var duration: CFTimeInterval { get set } ////速度 (預設為1) //public var speed: Float { get set } ////讓動畫快進到某一點,例如時長2,timeOffset設為1,將從一半的地方開始 //public var timeOffset: CFTimeInterval { get set } ////物件重複次數 //public var repeatCount: Float { get set } ////物件的重複持續時間 //public var repeatDuration: CFTimeInterval { get set } ////自動反向執行 //public var autoreverses: Bool { get set } ////物件在非動畫時間段的行為 //public var fillMode: String { get set }
CAAnimation核心動畫基礎類,相關屬性:
//動畫的節奏 open var timingFunction: CAMediaTimingFunction? ( //勻速 public let kCAMediaTimingFunctionLinear: String //慢進快出 public let kCAMediaTimingFunctionEaseIn: String //快進慢出 public let kCAMediaTimingFunctionEaseOut: String //慢進慢出,中間加速 public let kCAMediaTimingFunctionEaseInEaseOut: String //預設 public let kCAMediaTimingFunctionDefault: String ) //代理 open var delegate: CAAnimationDelegate? //是否在完成後移除(預設為true 動畫完畢後從圖層移除,恢復之前狀態) open var isRemovedOnCompletion: Bool
子類CAPropertyAnimation屬性動畫也屬於是抽象類。它的兩個子類才能直接對層層進行動畫操作,其中CABasicAnimation負責基礎動畫,CAKeyframeAnimation負責關鍵幀動畫。
其中CAPropertyAnimation中的相關屬性:
//CALayer的屬性名,根據相應屬性名達到相應動畫效果 open var keyPath: String? //是否以當前動畫效果為基礎(預設為false) open var isAdditive: Bool //動畫是否為累加效果,預設為false open var isCumulative: Bool //動畫值,配合transform屬性使用 open var valueFunction: CAValueFunction?
CABasicAnimation基礎動畫:
//keyPath屬性的初始值 open var fromValue: Any? //keyPath屬性的結束值 open var toValue: Any? //過渡值(在當前的位置上增加多少,不設定toValue時,toValue = fromValue + byValue) open var byValue: Any?

BaseAnimation.gif
CASpringAnimation彈簧動畫是CABasicAnimation的子類,是蘋果專門解決開發者關於彈簧動畫的這個需求而封裝的類,相關屬性:
//質量 直接影響彈簧慣性, 質量越大則壓縮和拉伸的程度越大 open var mass: CGFloat //勁度係數,形變越大 勁度係數越大 open var stiffness: CGFloat //阻尼係數,阻尼越大 停止越快 open var damping: CGFloat // 初始速度,正值與運動方向一致,負值與運動方向相反 open var initialVelocity: CGFloat // 預估時間,根據以上引數計算出的預估時間 open var settlingDuration: CFTimeInterval { get }
CAKeyframeAnimation關鍵幀動畫:
//由關鍵幀組成的陣列,動畫依次顯示每一幀 open var values: [Any]? //關鍵幀路徑,優先順序比values高,如果設定了path將忽略values,只對CALayer的anchorPonit和position起作用 open var path: CGPath? //每一幀對應的時間,不設定的話,各關鍵幀平分設定時間 open var keyTimes: [NSNumber]? //每一幀對應的動畫節奏 open var timingFunctions: [CAMediaTimingFunction]? //動畫計算模式 open var calculationMode: String //動畫張力 open var tensionValues: [NSNumber]? //動畫連續性 open var continuityValues: [NSNumber]? //動畫偏差率 open var biasValues: [NSNumber]? //動畫沿路徑旋轉方式 open var rotationMode: String?
CAAnimationGroup動畫組,多動畫統一管理
//包含所有動畫的陣列 open var animations: [CAAnimation]?

groupAnimation.gif
CATransition轉場動畫,屬性如下:
//轉場動畫型別 open var type: String //動畫方向 open var subtype: String? //動畫起點進度 百分比 open var startProgress: Float //動畫終點進度 百分比
開啟var endProgress:Float幾種型別效果:(使用需謹慎)

transitionAnimation.gif
控制器轉場動畫效果:考慮動畫使用場景,轉場多為頁面跳轉或是一些圖片的翻轉,可以通過UIView的動畫函式或核心動畫做一些自定義的動畫效果。主要介紹自定義轉場動畫實現在的UINavigationController的推動和流行以及模態形式中的場景:
目前彈性效果:
//音量波動效果
CAReplicatorLayer可以將自己的子圖層複製指定的次數,並且複製體會保持被複製圖層的各種基礎屬性以及動畫
/* //複製圖層次數 open var instanceCount: Int // open var preservesDepth: Bool //複製間隔 open var instanceDelay: CFTimeInterval //複製圖層距上一圖層的位移 open var instanceTransform: CATransform3D //設定複製圖層顏色 open var instanceColor: CGColor? //相對於上一複製圖層紅色偏移量 open var instanceRedOffset: Float //相對於上一複製圖層綠色偏移量 open var instanceGreenOffset: Float //相對於上一複製圖層藍色偏移量 open var instanceBlueOffset: Float //相對於上一複製圖層透明度偏移量 open var instanceAlphaOffset: Float */

voiceImage.gif
CAGradientLayer漸變效果:

CAGradientLayerImage.gif
利用CAReplicatorLayer複製圖層實現反射效果:

WechatIMG194.png
未完待續...(程式碼後面逐步上傳)