iOS 動畫:1.試圖動畫 :UIview動畫(動畫塊赏壹、過渡動畫)
? ? ? ? ? ? ? ? ? ?2.核心動畫Core Animation(縮寫CA):圖層動畫、隱式動? ? ? 畫泥彤、顯式動畫欲芹、關鍵幀動畫
注釋:其實UIview下的動畫本質上也是在UIKit和core Animation框架下進行封裝、優(yōu)化實現的吟吝。UIkit通常通過Bool值開啟動畫效果菱父,例如:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^ __nullable)(void))completion?
? ? ? ? 每個視圖都關聯(lián)到一個圖層(CALayer)對象,視圖處理事件剑逃,圖層上的動畫浙宜、繪制可視效果都直接或間接的有圖層處理。
視圖支持動畫的屬性炕贵,包括frame梆奈、bounds、center称开、alpha亩钟、transform、 動畫延遲時間鳖轰、動畫曲線(淡入/淡清酥、淡入、淡出蕴侣、線性等)動畫過渡焰轻、重復次數、自動反轉等屬性昆雀。
一>.試圖動畫
1.動畫塊:
注釋:其中的一下屬性如動畫曲線辱志、過渡等屬性也適用于過渡動畫
[UIView beginAnimations:@"animation" context:nil];
/*動畫內容:*/
[UIView commitAnimations];
注釋:需要捕捉動畫開始和結束時間蝠筑,可設置UIView的動畫代理delegate ,在這兩個方法里實現回調? + (void)setAnimationWillStartSelector:(nullable SEL)selector;
? ? ? + (void)setAnimationDidStopSelector:(nullable SEL)selector;
由于上面的動畫實現方法揩懒,代碼量過多什乙,于是封裝的下面的實現動畫并帶有回調的代碼塊
UIView animateWithDuration: animations:
UIView animateWithDuration: animations: completion:
UIView animateWithDuration: delay: options: animations: completion:
2.過渡動畫
[UIView beginAnimations:@"animation" context:nil];
[UIView setAnimationTransition:過渡樣式枚舉值 ? forView:? cache:]; ?
[UIView commitAnimations];
為了創(chuàng)建過渡動畫的簡便,于是就有了下面的方法:
[UIView transitionWithView: duration: options: animations: completion:] //在指定的視圖容器內創(chuàng)建過渡動畫
[UIView transitionFromView: toView: duration: options: completion:]? //在指定的兩個視圖之間創(chuàng)建動畫過渡(duration:動畫的持續(xù)時間? view:需要進行轉場動畫的視圖已球、options:轉場動畫的類型臣镣、animations:將改變視圖屬性的代碼放在這個Block里、completion:動畫結束后智亮,自動調用的Block)
//說明:options的參數曲線常量有淡入淡出(UIViewAnimationCurveEaseInOut)忆某、淡入、淡出等阔蛉。過渡的常量有 上翻(UIViewAnimationTransitionCurlUp)弃舒、下翻 等
二>.核心動畫
說明:核心動畫、基礎動畫(CABasicAnimation)馍忽、關鍵幀動畫(CAKeyframeAnimation)棒坏、動畫組、轉場動畫(CATransition)
一>.核心動畫
準備:導入QuartzCore.framework框架
1.開發(fā)步聚
1>.初始化一個動畫對象(CAAnimation)并且設置一些動畫屬性
2>.CALayer中很多屬性都可以通過CAAnimation實現動畫效果遭笋,包括:opacity、position徒探、transform瓦呼、bounds、contents等(可以在API文檔中搜索:CALayer Animatable Properties)
3>.添加動畫對象圖層(CALayer)中测暗,開始執(zhí)行動畫
4>.通過調用CALayer的addAnimation:forKey添加動畫到(CALayer)中央串,就這樣能觸發(fā)動畫。通過調用removeAnimationForKey可以停止層中的動畫
5>.Core Animation的動畫執(zhí)行過程都是后臺操作的碗啄,不會阻塞線程
2.屬性
1>.duration: 動畫的持續(xù)時間
2>.repeatCount: 重復次數(HUGE_VALF质和、MAX FLOAT無限重復)
3>.repeatDuration: 重復時間(這個屬性用的比較少)
4>.removedOnCompletion: 默認為yes.動畫執(zhí)行完成后默認從圖層中移除掉
5>.fillModel :填充模式
6>.biginTime:開始時間
7.timingFunction: 速度控制函數,控制動畫節(jié)湊
8.delegate:動畫相關的代理(遵從代理后可實現代理的方法)
二 >.基礎動畫(CABasicAnimation)
說明:如果只是實現簡單屬性變化的動畫效果稚字,可以使用UIView的塊動畫替代基本動畫
1.屬性說明
-fromValue:keyPath 相關的屬性的初始值
-toValue:keyPath相應屬性的結束值
2.動畫過程說明
隨著動畫的執(zhí)行饲宿,在duration的持續(xù)時間內,keyPath相應的屬性從fromValue漸漸變?yōu)閠oValue胆描,-keyPath內容是CALayer的可動畫Animation屬性瘫想,-如果fillMode=kCAFillModeForwards同時removedOnCompletion=NO,那么在動畫執(zhí)行完畢后昌讲,圖層會保持顯示動畫執(zhí)行后的狀態(tài)国夜,但在實質上,圖層的屬性值還是動畫執(zhí)行前的初始值短绸,并沒有真正改變车吹。
三 >筹裕、關鍵幀動畫
說明:關鍵幀動畫只能從一個值到另外一個值,關鍵幀動畫可以用一個數組保存一系列值
1. 屬性說明
- values:所有的值(使用的較少)
-path:路線(如果設置了path窄驹,那么values將被忽略)
-keyTimes:可以為對應的關鍵幀制定對應的時間點饶碘,取值范圍是0到1.0
2.動畫過程分類
1>.初始化自定義視圖,店家屏幕執(zhí)行動畫
2>.指定點路徑平移動畫(values)
3>.貝塞爾曲線動畫 (path C語言框架CGMutablePathRef)馒吴,需要手動釋放內存)
4>.搖晃動畫(修改旋轉角度)
四>.動畫組
說明:動畫是可以并發(fā)執(zhí)行的扎运,-定義一個group組,定義動畫饮戳,將動畫加入到動畫組中豪治,可以給組設置屬性
五.轉場動畫-CATransition
1.屬性說明
-type:動畫過渡類型
- startProgress: 動畫起點(在整體動畫的百分比)
- endProgress:動畫終點(在整體動畫的百分比)
-增加一個轉場演示視圖
-增加輕掃手勢
-在輕掃手勢方法中
1. 更改演示視圖內容?
2. 創(chuàng)建轉場動畫效果
3.將轉場動畫添加到視圖的圖層