使用CABAsicAnimation來實現(xiàn)動畫的放縮和旋轉(zhuǎn)是比較常用的,這篇主要介紹CABasicAnimation實現(xiàn)簡單的動畫效果
10年積累的成都做網(wǎng)站、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有遜克免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
最終的效果圖為:
Demo地址
對應(yīng)的實現(xiàn)文件是SecondViewController
首先,我們先定義一個UIView以及三個button按鈕,分別對應(yīng)平移、放大和旋轉(zhuǎn)
在.h文件中定義相應(yīng)的屬性
之后,在.m文件中實現(xiàn)相應(yīng)的懶加載
將UIView以及button添加到界面上
之后,我們先來實現(xiàn)平移動畫,實現(xiàn)下面的方法
這里面遇到挺多坑的,下面逐條說明一下
接下倆,我們類似添加相應(yīng)的放大和旋轉(zhuǎn)的動畫效果
這樣,我們就完成了CABasicAnimation實現(xiàn)平移、放大和旋轉(zhuǎn)的動畫效果
這種動畫效果使用挺多的
另外,我們閱讀蘋果開發(fā)文檔時,我們可以看到協(xié)議CAAnimationDelegate,通過這個協(xié)議我們可以觀察動畫的開始和結(jié)束。
在平移動畫中,讓CABasicAnimation遵守這個協(xié)議
實現(xiàn)相應(yīng)的協(xié)議方法
比較重要的是,我們通過協(xié)議方法可以判斷動畫是否正常完成還是被打斷,這個我以前就碰到過動畫過程被UITableView 的reloadData打斷,導(dǎo)致動畫表現(xiàn)異常,具體可以看下這篇文章
CAnimationGroup動畫執(zhí)行時間比duration小
)
最終效果圖為:
Demo地址
我寫的同一系列的其他文章
iOS開發(fā)中動畫效果的探究(一)
iOS動畫效果的探究二:UIView Animation實現(xiàn)動畫
iOS動畫效果三:CABAsicAnimation實現(xiàn)平移、旋轉(zhuǎn)和放大
ios動畫效果四:使用Pop框架實現(xiàn)彈簧效果
iOS動畫效果五:CABasicAnimation實現(xiàn)繞定點旋轉(zhuǎn)的效果 ]
iOS動畫效果六:實現(xiàn)自定義的push轉(zhuǎn)場動畫
iOS動畫效果七:實現(xiàn)自定義present轉(zhuǎn)場動畫效果
iOS動畫效果八:實現(xiàn)類似系統(tǒng)的測滑返回效果
動畫在UI交互中是一種增強用戶體驗的利器,目前看到幾乎每一個移動App都會使用到各種動畫效果。
在IOS開發(fā)中實現(xiàn)動畫效果通常有三種方式。
可以用來做什么呢:
設(shè)置UIView的屬性:例如
frame
bounds
center
transform
alpha
backgroundColor
contentStretch
看一下實例:
我們可以看到self.greenView通過UIView Animation動畫將某些屬性進行了改變。
現(xiàn)在我們適當(dāng)?shù)募尤胍恍﹦赢媹?zhí)行的方式【options】
在開發(fā)中可以添加特定的options滿足不同的動畫需要。
彈簧效果:
CABasicAnimation 為layer屬性提供了基礎(chǔ)的幀動畫能力,創(chuàng)建一個CABasicAnimation的實例,使用繼承自CAPropertyAnimation的animationWithKeyPath:方法,來指定要添加動畫的layer屬性的keypath
讓一個view向左平移,在x方向上從屏幕x中間線型移動到左邊消失,耗時1.5秒的動畫
KeyPath的改變動畫的效果就不一樣,開發(fā)中改變KeyPath的屬性可以實現(xiàn)大多數(shù)我們需要的動畫執(zhí)行的效果
用CABasicAnimation執(zhí)行動畫,在動畫結(jié)束后會回歸動畫開始前的狀態(tài)。想要解決的話,必須設(shè)置“removedOnCompletion”和“fillMode”這兩個屬性。
由于在開發(fā)過程中光是CABasicAnimation的fromValue、toValue起點和終點設(shè)置是無法滿足我們希望在動畫中途進行更多的變化的需求,所以我們需要認(rèn)識一下CAKeyframeAnimation
從上面的繼承圖我們看出CAKeyframeAnimation 比CABasicAnimation多了更多的可設(shè)置屬性
關(guān)鍵幀動畫其實通過一組動畫類型的值(或者一個指定的路徑)和這些值對應(yīng)的時間節(jié)點以及各時間節(jié)點的過渡方式來控制顯示的動畫。關(guān)鍵幀動畫可以通過path屬性和values屬性來設(shè)置動畫的關(guān)鍵幀。
可以保存一組動畫CAKeyframeAnimation、CABasicAnimation對象,將CAAnimationGroup對象加入圖層后,組中所有動畫對象可以同時并發(fā)運行。
注意:默認(rèn)情況下,一組動畫對象是同時運行的,也可以通過設(shè)置單個動畫對象的beginTime屬性來更改動畫的開始時間,單個動畫的執(zhí)行效果可以與動畫組執(zhí)行效果屬性分開設(shè)定,根據(jù)需要調(diào)整改變。
啊,開始填坑。。。
主要是想說CALayer的模型層(modelLayer)和展示層(presentationLayer)。
當(dāng)我們使用CALayer去做一些動畫效果時,你可能會發(fā)現(xiàn)你點擊正在動畫的圖層觸發(fā)不了它對應(yīng)的方法,但是這個圖層卻是真真切切地在動,這個就和CALayer的模型層和展示層有關(guān)。
模型層M中保存著需要繪制的內(nèi)容和屬性,展示層P會在下次繪制時“詢問”M如何繪制,而P繪制的過程(包括產(chǎn)生動畫效果)是我們看到的現(xiàn)象。
簡單地說,你看到的動畫時M指揮P完成的。
那么我們?yōu)槭裁传@得不了點擊事件呢?
我們知道UIView是負(fù)責(zé)用戶交互的,Layer本身不具備用戶交互事件(你對View顯示上的操作其實最終操作的是Layer)。Layer產(chǎn)生的動畫,例如fromValue toValue確確實實是Layer在動,但在動畫過程中M并沒有變(你可以當(dāng)做View的原始位置沒有變,動的是Layer),所以相應(yīng)點擊事件的依舊是原來的位置。(而且在動畫的過程中,一個CAAnimation加在了Layer上,此時的P繪制時會去詢問A,動畫完成后A從Layer移除掉,P才會向M詢問怎么繪制)。