一些日常的動畫練習
//動畫演示...
iOS版動畫
UIView與CALayer的關系:首先CALayer從NSObject繼承,不具備響應,而UIView從UIResponder繼承油狂,可以對事件做出響應,UIView主要是對現(xiàn)實內(nèi)容的管理,而CALayer主要是對現(xiàn)實顯示內(nèi)容的繪制速警,當我們創(chuàng)建一個UIView的對象時叹誉,系統(tǒng)自動為我們創(chuàng)建一個CALayer的對象,也就是UIView的的層屬性闷旧,層用來繪制和渲染圖形长豁,UIView的本身不具備顯示的功能,我們實際所能看到的內(nèi)容是由層所呈現(xiàn)通過層對象可以很方便地調(diào)整的UIView的一些界面屬性忙灼,比如:陰影匠襟,圓角大小,邊框?qū)挾群皖伾?/p>
核心動畫:
CAAnimation類及其子類:CAAnimation是QuartzCore框架下的遵約CAMediaTiming協(xié)議和CAAction協(xié)議的抽象類该园,平時動畫所使用的是它的一些子類酸舍,結(jié)構(gòu)關系如下:
CAMediaTiming協(xié)議中定義了速度,時間里初,重復次數(shù)等啃勉,屬性如下:
// //對象的開始時間,相對于其父對象
// public var beginTime: CFTimeInterval { get set }
// //對象的基本持續(xù)時間
// public var duration: CFTimeInterval { get set }
// //速度 (默認為1)
// public var speed: Float { get set }
// //讓動畫快進到某一點,例如時長2,timeOffset設為1,將從一半的地方開始
// public var timeOffset: CFTimeInterval { get set }
// //對象重復次數(shù)
// public var repeatCount: Float { get set }
// //對象的重復持續(xù)時間
// public var repeatDuration: CFTimeInterval { get set }
// //自動反向執(zhí)行
// public var autoreverses: Bool { get set }
// //對象在非動畫時間段的行為
// public var fillMode: String { get set }
CAAnimation核心動畫基礎類青瀑,相關屬性:
// 動畫的節(jié)奏
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 動畫完畢后從圖層移除,恢復之前狀態(tài))
open var isRemovedOnCompletion: Bool
子類CAPropertyAnimation屬性動畫也屬于是抽象類璧亮。它的兩個子類才能直接對層層進行動畫操作,其中CABasicAnimation負責基礎動畫斥难,CAKeyframeAnimation負責關鍵幀動畫枝嘶。
其中CAPropertyAnimation中的相關屬性:
//CALayer的屬性名,根據(jù)相應屬性名達到相應動畫效果
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屬性的結(jié)束值
open var toValue: Any?
//過渡值(在當前的位置上增加多少,不設置toValue時,toValue = fromValue + byValue)
open var byValue: Any?
CASpringAnimation彈簧動畫是CABasicAnimation的子類哑诊,是蘋果專門解決開發(fā)者關于彈簧動畫的這個需求而封裝的類群扶,相關屬性:
//質(zhì)量 直接影響彈簧慣性, 質(zhì)量越大則壓縮和拉伸的程度越大
open var mass: CGFloat
//勁度系數(shù),形變越大 勁度系數(shù)越大
open var stiffness: CGFloat
//阻尼系數(shù),阻尼越大 停止越快
open var damping: CGFloat
// 初始速度,正值與運動方向一致,負值與運動方向相反
open var initialVelocity: CGFloat
// 預估時間,根據(jù)以上參數(shù)計算出的預估時間
open var settlingDuration: CFTimeInterval { get }
CAKeyframeAnimation關鍵幀動畫:
//由關鍵幀組成的數(shù)組,動畫依次顯示每一幀
open var values: [Any]?
//關鍵幀路徑,優(yōu)先級比values高,如果設置了path將忽略values,只對CALayer的anchorPonit和position起作用
open var path: CGPath?
//每一幀對應的時間,不設置的話,各關鍵幀平分設定時間
open var keyTimes: [NSNumber]?
//每一幀對應的動畫節(jié)奏
open var timingFunctions: [CAMediaTimingFunction]?
//動畫計算模式
open var calculationMode: String
//動畫張力
open var tensionValues: [NSNumber]?
//動畫連續(xù)性
open var continuityValues: [NSNumber]?
//動畫偏差率
open var biasValues: [NSNumber]?
//動畫沿路徑旋轉(zhuǎn)方式
open var rotationMode: String?
CAAnimationGroup動畫組,多動畫統(tǒng)一管理
//包含所有動畫的數(shù)組
open var animations: [CAAnimation]?
CATransition轉(zhuǎn)場動畫镀裤,屬性如下:
//轉(zhuǎn)場動畫類型
open var type: String
//動畫方向
open var subtype: String?
//動畫起點進度 百分比
open var startProgress: Float
//動畫終點進度 百分比
打開var endProgress:Float幾種類型效果:(使用需謹慎)
控制器轉(zhuǎn)場動畫效果:考慮動畫使用場景竞阐,轉(zhuǎn)場多為頁面跳轉(zhuǎn)或是一些圖片的翻轉(zhuǎn),可以通過UIView的動畫函數(shù)或核心動畫做一些自定義的動畫效果暑劝。主要介紹自定義轉(zhuǎn)場動畫實現(xiàn)在的UINavigationController的推動和流行以及模態(tài)形式中的場景:
目前彈性效果:
//音量波動效果
CAReplicatorLayer可以將自己的子圖層復制指定的次數(shù)骆莹,并且復制體會保持被復制圖層的各種基礎屬性以及動畫
/*
//復制圖層次數(shù)
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
*/
CAGradientLayer漸變效果:
利用CAReplicatorLayer復制圖層實現(xiàn)反射效果:
未完待續(xù)...(代碼后面逐步上傳)