2010-11-19 8 views
2

無視:CATransactionは即時であり、このコードなぜ把握することはできません遷移時間

CALayer *viewLayer = [aView layer]; 
[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:10.0f] 
       forKey:kCATransactionAnimationDuration]; 
viewLayer.position = CGPointMake(200.0f, 200.0f); 
viewLayer.position = CGPointMake(320.0f, 480.0f); 

[CATransaction commit]; 

移動ビューが、動きをアニメーション化されていないが(動きが即時です)。 aViewはUIView内のUIImageViewです。

答えて

4

ビューに関連付けられたレイヤーの暗黙的な操作は無効です。ビューは常に独自のレイヤーのデリゲートであり、暗黙的なアニメーションを無効にし、UIViewアニメーションブロック内にのみアニメーションを追加するには-actionForKey:を実装します。 CABasicAnimationsを明示的に使用することをお勧めします。最初のポイントから2番目のポイントにアニメートしたい場合は、

CALayer *layer = aView.layer; 

layer.position = CGPointMake(320, 480); // final position 
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position"]; 
anim.fromValue = [NSValue valueWithCGPoint:CGPointMake(200, 200)]; 
anim.toValue = [NSValue valueWithCGPoint:layer.position]; // I believe this line is optional, it should default to current position 
[layer addAnimation:anim forKey:@"position"]; 
のように使用できます。