2009-05-15 13 views
1

UIViewの+ setAnimationDelegate:がクラスメソッドであるため、これは不可能ではないかと心配しています。しかし、おそらく私はそれに間違っていますか?複数のアニメーションデリゲートを同時に作成することはできますか?

背景: 問題は、私は同じクラスの多くのオブジェクトを持っているため、そのオブジェクトに対して特別なアニメーションを特別に行うメソッドを実装したいと考えています。これらのアニメーションは少し複雑で、いくつかのフェーズで構成されています。アニメーションが停止したときに通知を受ける必要があります。今、そのクラスの10個のオブジェクトが同時にアニメーションを開始することがあります。

答えて

1

+[UIView beginAnimations:context:]メソッドを使用すると、完了メソッドに渡された特定のcontextを渡すことができます。完了メソッドが呼び出されたときに、そのコンテキストを使用してさまざまなインスタンス間の矛盾を解消することができます。

コンテキストは(void *)とタイプされているため、オブジェクトインスタンスへのポインタ、一意のID、カスタム構造体など、あなたが望むものは何でも構いません。

オブジェクトがすべて共通のプロトコルを実装している場合は、コンテキストとして渡すことができ、animationDidStopメソッドでは、プロトコルで定義されたメソッドを呼び出すだけです。つまり、クラス全体で1つのanimationDidStopメソッドを持っていても、ファンアウトメソッドのディスパッチャとして機能することができます。

+0

クール。したがって、たとえばbeginAnimationsを呼び出すときにコンテキストとして「self」を設定できますか?私はすぐにそれを試みます。 – Thanks

1

複数のオブジェクトに対して異なるアニメーションデリゲートを設定する唯一の方法は、それらをUIViewの別々のサブクラスにすることです。あなたが考えるように、+setAnimationDelegate:はクラスメソッドなので、同じクラスの異なるインスタンスに対して別々のアニメーションデリゲートを設定することはできません。

+0

これは意味があります。 – Thanks

2

各アニメーションブロックには独自のデリゲートがあります。 +[UIView setAnimationDelegate:]+[UIView setAnimationDidStopSelector:]は、+[UIView beginAnimations:context:]+[UIView commitAnimations]の間で呼び出されたときだけ何も行い、そのブロックで設定されたアニメーションにのみ影響します。

関連する問題