2012-03-11 35 views
1

**注意:這是針對iOS的,而不是OS X,所以隱式動畫不會自動設置。如何爲CALayer的'position'屬性添加隱式動畫?

我想隱動畫添加到一個的CALayer的位置屬性。

我(不正確)的代碼是這樣的:

NSMutableDictionary * actions = [self.view.layer.actions mutableCopy ] ; 
if (!actions) { actions = [ NSMutableDictionary dictionary ] ; } 

CABasicAnimation * anim = [ CABasicAnimation animationForKeyPath:@"position" ] ; 

[ actions setValue:anim forKey:@"position" ] ; 
self.view.layer.actions = actions ; 

我的問題是,什麼樣的動畫(的動畫財產,上面),即CABasicAnimationCATransition我應該使用這個場景和我應該如何配置它?

古拉爵

回答

1

隱式動畫,由剛剛設置的位置屬性(即self.view.layer.position = <new position>;)和Quartz將使用當前CATransaction設置剩下的事情觸發。

如果你想使用顯式動畫(你似乎想要做的),我會用CABasicAnimation,做這樣的事情。

self.view.layer.position = <new position>; 
    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"]; 
    animation.duration = <duration>; 
    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 
    animation.fromValue = <current position>; 
    animation.toValue = <new position>; 
    [line addAnimation:animation forKey:@"position"]; 
+0

我應該更具體 - 你說的是在OS X上是真實的,但在iOS上隱式動畫不會自動設置..據我所知。 – nielsbot 2012-03-11 23:41:47

+0

上次我做到了這一點,(iOS 4.x),如果我沒有記錯,它們會自動設置。否則,您可能需要在[CATransaction begin]和[CATransaction commit]' – jin 2012-03-12 20:30:09

+0

中包裝更改如果這是真的不會執行'layer.position = p'導致位置動畫?我只看到一個突然的過渡。 – nielsbot 2012-03-13 02:41:33