Core Animation,中文翻譯爲核心動畫,它是一組很是強大的動畫處理API,使用它能作出很是炫麗的動畫效果,並且每每是事半功倍。也就是說,使用少許的代碼就能夠實現很是強大的功能。 面試
核心動畫基本概念算法
基本動畫swift
關鍵幀動畫數組
動畫組bash
轉場動畫數據結構
Core Animation是一組很是強大的動畫處理API,使用它能作出很是炫麗的動畫效果,並且每每是事半功倍! 使用它須要先添加QuartzCore.framework和引入對應的框架<QuartzCore/QuartzCore.h>併發
開發步驟:框架
一、初始化一個動畫對象(CAAnimation)並設置一些動畫相關屬性 二、CALayer中不少屬性均可以經過CAAnimation實現動畫效果,包括:opacity、position、transform、bounds、contents等(能夠在API文檔中搜索:CALayer Animatable Properties) 三、添加動畫對象到層(CALayer)中,開始執行動畫 四、經過調用CALayer的addAnimation:forKey增長動畫到層(CALayer)中,這樣就能觸發動畫了。經過調用removeAnimationForKey能夠中止層中的動畫 五、Core Animation的動畫執行過程都是在後臺操做的,不會阻塞主線程函數
小編給你們推薦一個iOS技術交流羣:923910776!羣內提供數據結構與算法、底層進階、swift、逆向、整合面試題等免費資料!
l 是全部動畫對象的父類,負責控制動畫的持續時間和速度,是個抽象類,不能直接使用,應該使用它具體的子類動畫
l 屬性說明:(紅色表明來自CAMediaTiming協議的屬性)
l 基本動畫,是CAPropertyAnimation的子類 l 屬性說明:
l 動畫過程說明:
l 關鍵幀動畫,也是CAPropertyAnimation的子類,與CABasicAnimation的區別是:
l 屬性說明:
values:上述的NSArray對象。裏面的元素稱爲「關鍵幀」(keyframe)。動畫對象會在指定的時間(duration)內,依次顯示values數組中的每個關鍵幀
path:能夠設置一個CGPathRef、CGMutablePathRef,讓圖層按照路徑軌跡移動。path只對CALayer的anchorPoint和position起做用。若是設置了path,那麼values將被忽略
keyTimes:能夠爲對應的關鍵幀指定對應的時間點,其取值範圍爲0到1.0,keyTimes中的每個時間值都對應values中的每一幀。若是沒有設置keyTimes,各個關鍵幀的時間是平分的
l CABasicAnimation可看作是隻有2個關鍵幀的CAKeyframeAnimation
l 動畫組,是CAAnimation的子類,能夠保存一組動畫對象,將CAAnimationGroup對象加入層後,組中全部動畫對象能夠同時併發運行
l 屬性說明:
animations:用來保存一組動畫對象的NSArray
默認狀況下,一組動畫對象是同時運行的,也能夠經過設置動畫對象的beginTime屬性來更改動畫的開始時間
l CATransition是CAAnimation的子類,用於作轉場動畫,可以爲層提供移出屏幕和移入屏幕的動畫效果。iOS比Mac OS X的轉場動畫效果少一點
l UINavigationController就是經過CATransition實現了將控制器的視圖推入屏幕的動畫效果
l 動畫屬性:
type:動畫過渡類型
subtype:動畫過渡方向
startProgress:動畫起點(在總體動畫的百分比)
endProgress:動畫終點(在總體動畫的百分比) -轉場動畫過渡效果 :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 界面切換的代碼
static int i = 2;
NSString *imageName = [NSString stringWithFormat:@"%d",i];
_imageView.image = [UIImage imageNamed:imageName];
i++;
if (i > 3) {
i = 1;
}
// 只要切換界面 均可以使用轉場動畫
// 誰切換界面 就添加到誰上
// 轉場動畫代碼必須和界面切換的代碼放在一塊兒
// 轉場動畫
CATransition *anim = [CATransition animation];
// 指定轉場類型
anim.type = @"pageCurl";
// 設置轉場的方向
anim.subtype = kCATransitionFromLeft;
// 設置動畫的進度
anim.startProgress = 0.5;
anim.endProgress = 0.8;
anim.duration = 3;
[_imageView.layer addAnimation:anim forKey:nil];
}
複製代碼
核心動畫一切都是假象,因此並不會真實的修改layer的屬性, UIView真實改變屬性纔能有動畫,何時使用核心動畫,何時使用UIView,若是之後在執行動畫的過程當中,不須要與用戶交互,用核心動畫就好了,核心動畫使用場景: 轉場動畫用的最多。