2011-08-09 9 views
0

私はこのコードを持っている:0.00から1.00へIOS:UIViewImage setAlpha問題

時に画像変化アルファそれはなぜ、3秒でimediatelyはないでしょうか?

- (void) startAnimation{ 

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:1.00]; 
[UIView commitAnimations]; 


[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:3]; 
[successView setAlpha:0.00]; 
[UIView commitAnimations];} 

答えて

3

どちらのアニメーションはそれはUIViewのアニメーションが動作し、すべての方法を1つの実行サイクルにおけるアニメーションがあります(同じ実行サイクルで実行されている「連結。」 あなたが

[UIView setAnimationDelay:3.0]; 

を使用する必要があります秒のアニメーション。


サンプルコード
この-使用して、標準的な開始/アニメーションをコミット、またはブロックの方法を使用して操作を行うには二つの方法があります。この例の使用は■アニメーションの開始/コミットコード。これはあなたが持っているものです。この問題は、アニメーションが連結されていて、CAに入らずに、標準のアニメーション動作が、他のアニメーションが実行される前に強制的に終了することであるためです。実行ループと関係があります。 アニメーション駆動のインターフェイスを構築 WWDC 2010からこれについて深く入ります。しかし、あなたが欲しいものを行うためのコードは次のようになります。

- (void)fadeOut { 
    [UIView beginAnimations:@"Animation2" context:NULL]; 
    [UIView setAnimationDuration:3]; 
    [self.testView setAlpha:0.00]; 
    [UIView commitAnimations]; 
} 
- (IBAction)animate { 
    [UIView beginAnimations:@"Animation1" context:NULL]; 
    [UIView setAnimationDuration:3]; 
    [self.testView setAlpha:1.00]; 
    [UIView commitAnimations]; 

    [self performSelector:@selector(fadeOut) withObject:nil afterDelay:3.0]; 
} 

あなたは基本的に、実行ループを分割することを強制する必要があります。覚えておくべき重要なことは、アニメーションが順番に実行されないことです。

ブロックベースのコードは次のようになります。私は自動的にアニメーションを繰り返すautorepeatオプションを使用していることに注意してください。ただし、アニメーションではプロパティを設定しているので、アニメーションが完了した後はデフォルトで表示が戻ってきます。したがって、完成ブロックでプロパティを再び0に設定しました。

- (IBAction)animate { 
    [UIView transitionWithView:self.testView duration:3.0 options:UIViewAnimationOptionAutoreverse animations:^{self.testView.alpha = 1.0;} completion:^(BOOL finished) {self.testView.alpha = 0.0;}]; 
} 

この機能が役立ちますように!

+0

okですが、私は0.00から1.00までのアルファを3秒後に直ちに入力しないでください。あなたは例を挙げることができますか? – CrazyDev

+0

はい、完全に動作し、テストされた例が掲載されました。 – FeifanZ

関連する問題