2011-09-25 10 views
7

サードパーティのAPIによってアニメーションブロック内で呼び出されるメソッドがあります。その方法で私はいくつかのサブビューを構築するはずです。しかしこの場合、私はサブビューを構築するときにアニメーションを起こさせたくありません。UIViewアニメーションブロックにネストされたコードのアニメーションを無効にするにはどうすればよいですか?

「[UIView dontAnimateFromHere] ... [UIView nowYouMayAnimateAgain]」という言い方はありますか?

答えて

18

はい、本当にそういった方法があります。それはこのようなものだ:ブロックやアニメーションを経由してトリガこれは、両方のUIViewのアニメーションを無効にします...

[UIView setAnimationsEnabled:NO]; 
// Animations happen here 
[UIView setAnimationsEnabled:YES]; 

すると、古い開始/終了方法を使用してトリガ。

私はあなたのサードパーティのライブラリがプリコンパイルされていると仮定していますが、そうでなければソースを直接変更することができます。もちろん、別の方法で奇妙なやり方をしている可能性があります。 。

アニメーションブロックで行われた変更を無効にすることはありません。これらの変更はただちに発生します。そうしないと、サードパーティのAPIがビューが真実でない可能性があることを前提にしているため、悪いことが起こる危険があります。

3

iOS 7以降では、このUIViewの+performWithoutAnimation:があります。 performWithoutAnimationあなたはアニメーションブロック内にある一方で、直ちに変更を実行するのに便利ですが、それは、ネストされたブロック内で作られたアニメーションの呼び出しを無効にし、その利便性のためにそれを使用しますが、それはのsetAnimationsEnabledほど堅牢ではないではないということ

注意元の答え。

関連する問題