en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

5.09.2011

設定動畫結束後的物件位置

本篇文章主要講述當 CALayer 物件進行動畫結束後,如何停留在最後的位置。一般的想法很簡單,就是利用如下的程式碼:

[myLayer setPosition:lastPosition];
以上設定 myLayer 的最後位置,然後 myLayer 就會進行動畫,移動到最後位置,並且停留在最後位置。可是當使用 CABasicAnimation 物件來進行移動動畫時, myLayer 會移動到最後位置,然後呢? myLayer 就會回到開始位置。所以,如何解決?

在 CABasicAnimation 的屬性中, 我們需要針對 removedOnCompletion 以及 fillMode 兩個屬性做設定。參考程式碼如下:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.duration = 3.0;

animation.fromValue = [NSValue valueWithCGPoint:CGPointMake(aLayer.position.x, aLayer.position.y)];
animation.toValue = [NSValue valueWithCGPoint:CGPointMake(aLayer.position.x, aLayer.position.y + 100.0)];
//以下為關鍵設定,設定屬性 fillMode 以及 removedOnCompletion,讓動畫物件停留在最後位置
animation.fillMode = kCAFillModeForwards;
animation.removedOnCompletion = NO;

fillMode 屬性是決定當動畫完成之後,最後動畫的顯示結果為何?是要回到最初還是最後的顯示狀態。可參考 Apple 的官方文件,CAMediaTiming Protocol Reference






沒有留言:

張貼留言