2010-11-19 9 views
3

beginAnimationsを使用してアニメーションブロックを使用するアニメーションコードを変換しようとしています。beginAnimationsとアニメーションブロックのアニメーション速度が異なる

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly]; 
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:20]; 
birdFly.frame = CGRectMake(-1116,27,111,48); 
[UIView commitAnimations]; 
[birdFly release]; 
:私が午前問題は、私はアニメーションのブロックを使用するときのアニメーションがはるかに高速になり、私はこれは私が元々の使用を開始するものである期間の値に

を変更することで速度を調整するように見えることができないということです

これは私が最初に私が上記のものを置き換えるために試みたものです。このコードを使用すると、元のコードを使用していたときよりもはるかに高速にアニメーションが再生されます。でも、時間を変更することで、すべての速度を変更していないようだ。

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly]; 
[UIView animateWithDuration:20 
    animations:^{ 
     birdFly.frame = CGRectMake(-1116,27,111,48); 
    }]; 

私も、私が完了ブロックを必要と考え、これを試してみましたが、速度は、私はwasnとき私はもともと持っていたものと比べて同じくらい速くまだありましたブロックを使用しています。

birdFly.image = [UIImage imageNamed: @"bird1.png"]; 
[self.view addSubview:birdFly];  
UIViewAnimationOptions options = UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction; 
     [UIView animateWithDuration:20 delay:0.0 options:options animations:^ 
     { 
      birdFly.frame = CGRectMake(-1116,27,111,48); 
     } completion:nil]; 

コードはすべて同じことをしていますか?私はちょうどここで何か非常に単純なものを逃している?私は時間を長くすると鳥が遅くなり、それを減らすと速くなると思ったが、ブロックを使って鳥を変えるときには全く影響がないようだ。

ガイダンスをいただければ幸いです。

ありがとうございました。アーロン

答えて

4

アニメーションブロックは、別のアニメーションブロック内で発生した場合、-animateWithDuration:animations:は、外側のブロックの期間を継承します。オプションリストにUIViewAnimationOptionOverrideInheritedDurationを追加してください(また、カーブをオーバーライドする必要がある場合はUIViewAnimationOptionOverrideInheritedCurve)。

+0

ありがとうございます。それはうまくいった。私はそれがネストされているとは思わなかったが、あなたがそれを述べた後、私はいくつか見て、それは実際に別のアニメーションブロックにネストされていた。感謝! – AaronG

関連する問題