Core Animation(二)動畫基礎部分
一、概要
上一篇簡單的描述了Core Animation相關的內容,並且親自動手實踐了一個動畫,同時也提到了“隱式動畫”和“顯示動畫”,也提到了UIKit動畫,可見iOS的動畫部分確實有些內容需要掌握,所以針對大體三個問題去研究學習:
1、為什麼使用動畫?有哪些好處?
2、動畫都有哪些實現方式?該注意什麼?
3、每種方式都是如何實現動畫的?區別是什麼?
二、動畫基礎
1、iOS動畫使介面互動變得生動,當介面控制元件屬性改變或者更新和切換檢視時放緩節奏,顯得不那麼突兀,增強了使用者體驗,所有好的互動動畫效果是一個App的亮點,是留住使用者比較關鍵的一點。
2、iOS中動畫一般有兩種方式實現UIKit方式和Core Animation方式,而UIKit方式是對Core Animation的進一步封裝,UIKit使用起來很方便,但也失去了一些靈活性。
(1)UIKit動畫:常見如UIView動畫和UIImageView序列幀動畫
a、通過動畫上下文來使用UIView動畫,此種方式在iOS3.2及更早版本被使用,iOS4以後支援書寫更簡單的Block方式
- (void) animationOfUIKit { UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(80, 80, 200, 80)]; testView.backgroundColor = [UIColor redColor]; [self.view addSubview:testView]; [UIView beginAnimations:@"Test Animation" context:nil]; //設定動畫播放時間 [UIView setAnimationDuration:3]; //設定是否自動逆向播放 [UIView setAnimationRepeatAutoreverses:YES]; //設定重複播放次數 [UIView setAnimationRepeatCount:100]; //設定動畫曲線 [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; //設定動畫事件 [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.view cache:YES]; //設定代理 [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(animationOfUIKitDidStop)]; [UIView setAnimationWillStartSelector:@selector(animationOfUIKitStart)]; testView.backgroundColor = [UIColor cyanColor]; testView.frame = CGRectMake(80, 80, 100, 40); testView.alpha = 0.3; //提交併開始動畫 [UIView commitAnimations]; } - (void) animationOfUIKitStart { NSLog(@"animationOfUIKitStart"); } - (void) animationOfUIKitDidStop { NSLog(@"animationOfUIKitDidStop"); }
b、通過Block方法使用UIView動畫
- (void) animationOfUIKitWithBlock { UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(80, 80, 200, 80)]; testView.backgroundColor = [UIColor redColor]; [self.view addSubview:testView]; [UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseInOut animations:^{ testView.backgroundColor = [UIColor cyanColor]; testView.frame = CGRectMake(80, 80, 100, 40); testView.alpha = 0.3; } completion:^(BOOL finished) { }]; }
注意:UIView動畫除了可以產生例子a和b中展示的背景顏色(backgroundColor)、框架(frame)、透明度(alpha)動畫,還可以展示的動畫有改變狀態(隱藏或顯示狀態)、改變檢視層次順序(調整檢視的index)、旋轉(檢視上應用仿射變換)。
c、UIImageView序列幀動畫
- (void) animationOfUIImageView {
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:imageView];
imageView.animationImages = @[[UIImage imageNamed:@"bg.png"],
[UIImage imageNamed:@"image_a.png"],
[UIImage imageNamed:@"image_b.jpg"]];
imageView.animationDuration = 5;
imageView.animationRepeatCount = 10;
[imageView startAnimating];
}
(2)Core Animation動畫
- (void) animationOfCoreAnimation {
UIView *testView = [[UIView alloc] initWithFrame:CGRectMake(80, 80, 200, 80)];
testView.backgroundColor = [UIColor redColor];
[self.view addSubview:testView];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
animation.toValue = (id)[UIColor cyanColor].CGColor;
CABasicAnimation *animationFrame = [CABasicAnimation animationWithKeyPath:@"bounds"];
animationFrame.fromValue = [NSValue valueWithCGRect:CGRectMake(80, 80, 200, 80)];
animationFrame.toValue = [NSValue valueWithCGRect:CGRectMake(80, 80, 100, 40)];
CAAnimationGroup* group = [CAAnimationGroup animation];
group.animations = [NSArray arrayWithObjects:animation, animationFrame, nil];
group.duration = 3.0;
group.removedOnCompletion=NO;
group.fillMode=kCAFillModeForwards;
group.autoreverses = YES;
group.repeatCount = 100;
group.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
[testView.layer addAnimation:group forKey:@"Changes"];
}
注意:Core Animation動畫除了可以提供UIView動畫能提供的效果之外,還可以根據你需要提供更加複雜和絢麗的動畫,例如推擠、揭開、覆蓋、波紋、吸收、翻頁、鏡頭開關效果、空間沿著曲線路徑非線性運動。
3、UIView動畫和Core Animation動畫聯絡和區別
步驟2中實現的幾個動畫,我們發現UIKit動畫和Core Animation動畫都可以實現相似的動畫效果,但要注意一下幾點:
UIView動畫和Core Animation動畫的區別
(1)UIKit動畫使用UIView呼叫,Core Animation則在view.layer中使用
(2)UIKit動畫呼叫簡單,而Core Animation呼叫則複雜一些
(3)UIKit動畫方式侷限較大,而Core Animation則自由很多,可以實現很多奇妙的設計
UIView動畫和Core Animation動畫的聯絡:
(1)實際上UIView是iOS系統中介面元素的基礎,所有頁面都繼承自UIView,但UIView真正的繪圖部分是CALayer,而Core Animation動畫主要在CALayer上操作
(2)但CALayer不能響應使用者事件,所以UIView更像是一個CALayer的管理器,訪問UIView的frame、bounds等屬性,實際上內部操作的是CALayer的frame、bounds等屬性。從繼承關係來看UIView繼承UIResponder,而CALayer繼承NSObject。UIView有一個屬性是layer(CALayer型別),所以理解起來就容易了。
注意:以上我們使用的UIKit和Core Animation動畫都是我們自己定義的,都屬於“顯示動畫”,當一個UI控制元件使用顯示動畫的時候,系統將不在提供“隱式動畫”。
接下來詳細學習Core Animation相關內容。
相關推薦
Core Animation(二)動畫基礎部分
一、概要 上一篇簡單的描述了Core Animation相關的內容,並且親自動手實踐了一個動畫,同時也提到了“隱式動畫”和“顯示動畫”,也提到了UIKit動畫,可見iOS的動畫部分確實有些內容需要掌握,所以針對大體三個問題去研究學習: 1、為什麼使用動畫?有哪些好處? 2、
Core Animation(一)iOS圖形和動畫的初步認識
一、行業及平臺情況分析 在中國,一些發達城市,例如北、上、廣、深,都處於經濟高速發展階段,而人們的生活也越發的忙碌,時間高度碎片化,所以人們沒有很多時間坐在PC前,而都改用移動裝置,甚至現在一些大公司的部分辦公都依靠移動裝置,所以移動開發是將來一段時間的必然趨勢。 移動平臺
Python爬蟲小白---(二)爬蟲基礎--Selenium PhantomJS
decode bject windows beautiful 結構 由於 target header 速度 一、前言 前段時間嘗試爬取了網易雲音樂的歌曲,這次打算爬取QQ音樂的歌曲信息。網易雲音樂歌曲列表是通過iframe展示的,可以借助Selenium獲
大數據入門第二十天——scala入門(二)scala基礎
alt turn class 推斷 inf 循環 轉換 使用 mda 一、基礎語法 1.變量類型 // 上表中列出的數據類型都是對象,也就是說scala沒有java中的原生類型。在scala是可以對數字等基礎類型調用方法的。 2.變量聲明&mdas
Spark 的Core深入(二)
hadoop spark SPARK RDD Spark 的 Core 深入(二)
Guava學習筆記(二):基礎(Joiner,Objects,Splitter及Strings)
nonnull obj expect null dto 字符 情況 core cte 添加Maven依賴 JoinerTest import com.google.common.base.Joiner; import org.junit.Assert; import org
Android註冊程式編寫(二)主函式部分
Android註冊程式編寫(二) (作者:Baron_wu 禁止轉載) 大家關注一下,順便點個讚唄 首先安裝外掛:butterknife 開啟file下的setting並選擇plugins(在browse): 在browserepository中搜索butterknif
Java(二)之基礎語法
一、第一個java程式,與註釋. 1.hello world程式書寫. public class HelloWorld { public static void main(String[] args) { System.out.println("Hel
Java基礎(二)Java 基礎語法,小白趕緊來學習吧!
Java 基礎語法 一個Java程式可以認為是一系列物件的集合,而這些物件通過呼叫彼此的方法來協同工作。下面簡要介紹下類、物件、方法和例項變數的概念。 物件:物件是類的一個例項,有狀態和行為。例如,一條狗是一個物件,它的狀態有:顏色、名字、品種;行為有:搖尾巴、叫、吃等。 類:類
SmartGit 安裝及使用(二):基礎用法
一、smartgit工作介面說明 1、點選window,根據選擇需要展示的模組。 2、各模組功能說明。 二、克隆專案 1、點選Repository,選擇clone 2、複製Git倉庫地址 3、選擇分支 4、選擇專案存放的路徑,點選完成 三、提交程式碼 1、
android之animation(二)animationset、interpolator
一: animationset: 他是一個animation的一個子類,實際上是animation的一個集合。他將animation放到一個list集合中。需要對animation的基本設定可以通過animationset來設定。如果需要對一個控制元件進行多種動畫設定,可以採用animat
耳朵(二):Linux部分命令
(一)LINUX 終端裝置:terminal 螢幕與鍵盤只是一個終端,可能不夠用,又不想增加裝置投入,就產生了虛擬終端。 顯示系統訊息的終端就叫控制檯,Linux預設所有虛擬終端都是控制檯,都能顯示系統訊息。 物理終端,控制檯:console 虛擬終端:按Ctr
Flutter學習之旅(四)Flutter動畫(1)動畫基礎介紹
前言 本篇將介紹Flutter中動畫。首先來看下Flutter的動畫基礎概念和相關類 Animation:Flutter中動畫的核心類 AnimationController:動畫管理類 Tween:補間物件,用於計算動畫使用的資料範圍之間的插值。 Listeners
MySQL(二)------SQL基礎
一、SQL簡介 SQL(Structure Query Language) 是結構化查詢語言,是關係型資料庫的應用語言,大多數關係型資料庫都支援SQL作為底層會話語言。 二、SQL使用入門 &
Swift教程_零基礎學習Swift完整例項(二)_swift基礎(簡單值、控制流、方法和閉包)
三、Swift基礎介紹 本章將對Swift做一個簡單說明,內容取自《The Swift Programming Language》,並加之自己的理解。首先swift全域性作用域中的程式碼會被自動當做程
java程式設計師菜鳥進階(二)oracle基礎詳解(二)oracle查詢語句和資料排序
本文所以練習都是基於oracle自帶提供的一個數據庫進行的。資料庫中包含員工表emp。部門資訊表dept。員工工資工總表下面是三個表的表結構:一:基本查詢語句1.最簡單的查詢所有列語句Select * from emp;2.查詢指定列表的查詢語句Select empno ,e
Python資料分析基礎(二)——NumPy基礎
NumPy最重要的特點就是其N維陣列物件(即ndarray),該物件是一個快速而靈活的大資料集容器。 陣列建立函式 函式 說明 array 將輸入資料(列表、元組、陣列或其他序列型別)轉換為ndarray。 asarray 將輸入轉換為ndarray ara
程式設計與演算法(二)演算法基礎_北京大學 學習筆記(一)
第一週 列舉 所有題目用python實現 例題1 完美立方 N=int(input ('N=')) for a in range(3,N+1): for b in range(
Numpy學習(二)——Matplotlib基礎
Matplotlib 基礎 Matplotlib是一個類似Matlab的工具包,主要用來畫圖,主頁地址為:Matplotlib # 匯入 matplotlib 和 numpy: %pylab Using matplotlib backend: TkAg
Python爬蟲小白——(二)爬蟲基礎——Selenium PhantomJS
前段時間嘗試爬取了網易雲音樂的歌曲,這次打算爬取QQ音樂的歌曲資訊。網易雲音樂歌曲列表是通過iframe展示的,可以藉助Selenium獲取到iframe的頁面元素, 而QQ音樂採用的是非同步載入的方式,套路不一樣,這是主流的頁面載入方式,爬取有點難度,不過也是對自己的一個挑戰。 二、Pyt