2011-07-05 8 views
0
[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:0.30f]; 

[UIView setAnimationTransition:UIViewAnimationTransitionNone forView:viewSettings cache:YES]; 
viewSettings.alpha = 0; 
[viewSettings removeFromSuperview]; 
[UIView commitAnimations]; 

アニメーションでビューを追加するとうまくいく上のコードを作成しましたが、スーパービューからビューを削除すると機能しません。アニメーションは、[viewSettings removeFromSuperview]行を削除すると動作します。私はどこが間違っているのか分かりません。UIViewアニメーションの問題

答えて

2

アニメーションが完了したの後に、スーパービューから削除する必要があります。これはAppleがやってあなたを奨励しているAPIを、ベースのブロックを使用した場合に達成することは非常に簡単です:

[UIView transitionWithView:viewSettings 
        duration:0.30f 
        options:UIViewAnimationOptionTransitionNone 
       animations:^{ 
    [viewSettings setAlpha:0]; 
} completion:^(BOOL finished) { 
    [viewSettings removeFromSuperview]; 
}]; 

あなたはApple's documentationのすべてのオプションについて読むことができます。

+0

THANKSSSS A TON :) ....しかし、ブロブは、ブロックベースのAPIによって何を意味するのですか?申し訳ありませんm初心者のiphone :) – MGD

+0

ブロックは、オブジェクトとしてコードのセクション(またはブロック)をパッケージ化し、メソッドや関数に渡すことができます。 [Appleからのこのガイド](http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/_index.html%23//apple_ref/doc/uid/TP40009758)にはたくさんの詳細があります。 – MJeffryes

0

私はアニメーションをコミットする前にviewSettingsが削除されていると思います。 最後の2行を反転してみてください。

1

removeFromSuperviewはアニメーション可能なアクションではないため、すぐに実行されます。いったんcommitAnimationsになると、あなたのビューはスーパービューの一部ではなくなります。そのため、まだアニメーションが見えていない場合は、そのアニメーションを見ることはできません。

setAnimationDidStopSelector:で指定されたセレクタなど、アニメーションが終了すると、ビューが削除されるようにするには、removeFromSuperviewを呼び出します。

1

アニメーションが完了したら表示を削除してみます。ビューの最初のアルファ値は1で、アニメーションを適用して0にします。ビューはまだ表示されていますが、表示されません。アニメーションが終了したら、ビューを削除します。私はそれがうまくいくと思う。