Core Animation教程 關(guān)鍵楨動畫實例操作
Core Animation教程 關(guān)鍵楨動畫實例操作是本文要介紹的內(nèi)容,不多說,我們先來看內(nèi)容。實現(xiàn)動畫的操作。
Leopard中***的Core Animation技術(shù)可以讓開發(fā)者簡單地開發(fā)超酷的用戶界面。想想iPhone為什么這么受歡迎,因為它革命性的用戶界面和用戶體驗,可以讓人愛不釋手。在本站之前的文章里,我們介紹過一些關(guān)于Core Animation開發(fā)方面的文章,但是從來沒有介紹過關(guān)于關(guān)鍵楨動畫方面的內(nèi)容。
本文通過一個例子講解Core Animation關(guān)鍵楨動畫方面的基本知識,例子很清晰易懂。建議您有一定Cocoa知識以及掌握初步的Core Animation概念,那么通過本文您會了解更多關(guān)于Core Animation的知識
我最近進(jìn)行了一些關(guān)于關(guān)鍵楨動畫方面的研究,感覺不錯。關(guān)鍵楨動畫其實是一個很酷的東西,因為它們會在你創(chuàng)建的層進(jìn)行動作時給你提供更加精確的控制。基本動畫在“開始”和“結(jié)束”點之間進(jìn)行線性插值,在很多情況下,你都可以使用基本動畫。但是有時候,如果你希望進(jìn)行一些不一樣或者更復(fù)雜的動畫時,基本動畫就不夠用了。本文介紹的關(guān)鍵楨動畫可以允許你在動畫的過程中進(jìn)行精確控制。
與基本動畫進(jìn)行線性插值不同,關(guān)鍵楨動畫允許你在特定時間指定不同的數(shù)值,這樣你可以在動畫的全過程控制動畫的展示和動作。
自從發(fā)明手繪電影以來,關(guān)鍵楨就在動畫中起到了一定作用。一些資深的藝術(shù)家會針對一個場景畫不同的關(guān)鍵楨,而一些剛?cè)胄械乃囆g(shù)家卻會填滿每一楨,以便使動畫看起來更平滑。(有時候這個過程叫做tweening:兩者之間的動畫)。Core Animation的關(guān)鍵楨動畫可以幫我們實現(xiàn)在關(guān)鍵楨之間的填充,我們只需要指定哪個是關(guān)鍵楨,系統(tǒng)會自動幫我們生成動畫。
另外一個很酷的東西是,關(guān)鍵楨動畫同樣可以完成任何基本動畫能夠完成的動作。特別是點、大小或是矩形。比如如果我們希望讓一個層的不透明度顯示為一個動畫,我們可以指定一些不同的數(shù)值(比如:0.25, 0.50, 0.75),然后在動畫的過程的不同時間中逐漸變化。
再一個真的很酷的方面,我們不光可以使用離散數(shù)值,更可以使用CGPath去指定關(guān)鍵楨動畫的值。換句話說,我們不僅僅可以在特定時間點指定特定的動畫值,還可以使用曲線路徑去指定動畫的值。舉例說明,我們可以將一個層的不透明度用鐘型曲線表示:開始是透明,然后逐漸顯現(xiàn)到某個特定透明度,再逐漸變?yōu)橥该鳌N覀冞€可以用CGPoint和CGSize值的路徑做為動畫的行進(jìn)路線。這樣,路徑的x值可以表示橫坐標(biāo)也可以表示寬度,y既可以表示縱坐標(biāo)還可以表示高度。
本例中,我們會畫一個在窗口中前后行進(jìn)的層,下面是截圖:
圖中白色的線是一條貝塞爾曲線,我們創(chuàng)建的層會通過這條曲線行進(jìn)。這條曲線畫的很簡單,這樣我們就可以更容易看清楚細(xì)節(jié)。以下是創(chuàng)建路徑的代碼:
- CGMutablePathRef path = CGPathCreateMutable();
- CGPathMoveToPoint(path, NULL, _point1.x + _movieSize.width * 0.5f, _point1.y);
- CGPathAddCurveToPoint(path, NULL, _controlPoint1.x + _movieSize.width * 0.5f,
- _controlPoint1.y, _controlPoint2.x - _movieSize.width * 0.5f,
- _controlPoint2.y, _point2.x - _movieSize.width * 0.5f, _point2.y);
- if(NULL != _rightBoundKeyframePath) {
- CGPathRelease(_rightBoundKeyframePath);
- }
- _rightBoundKeyframePath = CGPathCreateCopy(path);
- CGPathRelease(path);
- path = CGPathCreateMutable();
- CGPathMoveToPoint(path, NULL, _point2.x - _movieSize.width * 0.5f, _point2.y);
就像你看到的一樣,這是一段很明了的Quartz路徑創(chuàng)建代碼。接下來我們用以下代碼將路徑放入關(guān)鍵楨動畫中:
- CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
- animation.duration = 2.0f;
- if(YES == _atLeftEdge) {
- animation.path = _rightBoundKeyframePath;
- // the rotation mode causes the layer to rotate along with the slope of the path
- animation.rotationMode = kCAAnimationRotateAuto;
- }
- else {
- animation.path = _leftBoundKeyframePath;
- // since the path is reversed, rotate at 180 degrees off
- animation.rotationMode = kCAAnimationRotateAutoReverse;
- }
- _movieLayer.actions = [NSDictionary dictionaryWithObject:animation forKey:@"position"];
這樣一來,無論層的位置如何改變,它都會沿著我們創(chuàng)建的曲線行進(jìn),而不是默認(rèn)的線性插值路徑了。這個例子中還有一些細(xì)節(jié)并未交代的特別清楚,但是這至少已經(jīng)幫助我們了解如何使用關(guān)鍵楨動畫了。
點擊可下載代碼,你可以自己嘗試編譯,希望你喜歡。
小結(jié):Core Animation教程 關(guān)鍵楨動畫實例操作的內(nèi)容介紹完了,希望本文對你有所幫助。