Core Animation教程 關鍵楨動畫實例操作
Core Animation教程 關鍵楨動畫實例操作是本文要介紹的內容,不多說,我們先來看內容。實現動畫的操作。
Leopard中***的Core Animation技術可以讓開發者簡單地開發超酷的用戶界面。想想iPhone為什么這么受歡迎,因為它革命性的用戶界面和用戶體驗,可以讓人愛不釋手。在本站之前的文章里,我們介紹過一些關于Core Animation開發方面的文章,但是從來沒有介紹過關于關鍵楨動畫方面的內容。
本文通過一個例子講解Core Animation關鍵楨動畫方面的基本知識,例子很清晰易懂。建議您有一定Cocoa知識以及掌握初步的Core Animation概念,那么通過本文您會了解更多關于Core Animation的知識
我最近進行了一些關于關鍵楨動畫方面的研究,感覺不錯。關鍵楨動畫其實是一個很酷的東西,因為它們會在你創建的層進行動作時給你提供更加精確的控制?;緞赢嬙?ldquo;開始”和“結束”點之間進行線性插值,在很多情況下,你都可以使用基本動畫。但是有時候,如果你希望進行一些不一樣或者更復雜的動畫時,基本動畫就不夠用了。本文介紹的關鍵楨動畫可以允許你在動畫的過程中進行精確控制。
與基本動畫進行線性插值不同,關鍵楨動畫允許你在特定時間指定不同的數值,這樣你可以在動畫的全過程控制動畫的展示和動作。
自從發明手繪電影以來,關鍵楨就在動畫中起到了一定作用。一些資深的藝術家會針對一個場景畫不同的關鍵楨,而一些剛入行的藝術家卻會填滿每一楨,以便使動畫看起來更平滑。(有時候這個過程叫做tweening:兩者之間的動畫)。Core Animation的關鍵楨動畫可以幫我們實現在關鍵楨之間的填充,我們只需要指定哪個是關鍵楨,系統會自動幫我們生成動畫。
另外一個很酷的東西是,關鍵楨動畫同樣可以完成任何基本動畫能夠完成的動作。特別是點、大小或是矩形。比如如果我們希望讓一個層的不透明度顯示為一個動畫,我們可以指定一些不同的數值(比如:0.25, 0.50, 0.75),然后在動畫的過程的不同時間中逐漸變化。
再一個真的很酷的方面,我們不光可以使用離散數值,更可以使用CGPath去指定關鍵楨動畫的值。換句話說,我們不僅僅可以在特定時間點指定特定的動畫值,還可以使用曲線路徑去指定動畫的值。舉例說明,我們可以將一個層的不透明度用鐘型曲線表示:開始是透明,然后逐漸顯現到某個特定透明度,再逐漸變為透明。我們還可以用CGPoint和CGSize值的路徑做為動畫的行進路線。這樣,路徑的x值可以表示橫坐標也可以表示寬度,y既可以表示縱坐標還可以表示高度。
本例中,我們會畫一個在窗口中前后行進的層,下面是截圖:

圖中白色的線是一條貝塞爾曲線,我們創建的層會通過這條曲線行進。這條曲線畫的很簡單,這樣我們就可以更容易看清楚細節。以下是創建路徑的代碼:
- 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路徑創建代碼。接下來我們用以下代碼將路徑放入關鍵楨動畫中:
- 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"];
這樣一來,無論層的位置如何改變,它都會沿著我們創建的曲線行進,而不是默認的線性插值路徑了。這個例子中還有一些細節并未交代的特別清楚,但是這至少已經幫助我們了解如何使用關鍵楨動畫了。
點擊可下載代碼,你可以自己嘗試編譯,希望你喜歡。
小結:Core Animation教程 關鍵楨動畫實例操作的內容介紹完了,希望本文對你有所幫助。























