2009-05-15 16 views
1

Ich mache mir Sorgen, dass dies unmöglich ist, weil + setAnimationDelegate: of UIView eine Klassenmethode ist. Aber vielleicht liege ich falsch damit?Ist es möglich, mehr als eine Animation gleichzeitig zu haben?

Hintergrund: Das Problem ist, dass ich viele Objekte der gleichen Klasse habe, und ich möchte eine Methode implementieren, die einige nette Animationen speziell für dieses Objekt macht. Diese Animationen sind ein wenig komplex und bestehen aus ein paar Phasen. Ich muss also benachrichtigt werden, wenn eine Animation gestoppt wurde. Nun kann es vorkommen, dass 10 Objekte aus dieser Klasse gleichzeitig animieren.

Antwort

1

Mit der Methode +[UIView beginAnimations:context:] können Sie einen bestimmten context übergeben, der an die Komplettierungsmethode übergeben wird. Sie können diesen Kontext verwenden, um zwischen den verschiedenen Instanzen zu disambugieren, wenn die Completion-Methode aufgerufen wird.

Da der Kontext als (void *) eingegeben wird, kann es so ziemlich alles sein, was Sie wollen, nämlich Zeiger auf eine Objektinstanz, eine eindeutige ID oder eine benutzerdefinierte Struktur.

Wenn Ihre Objekte alle ein gemeinsames Protokoll implementieren, können Sie sie als Kontext übergeben und in der animationDidStop-Methode nur die vom Protokoll definierte Methode aufrufen. Auch wenn Sie eine einzige klassenweite animationDidStop-Methode haben, kann sie als Fan-Out-Methodenverteiler fungieren.

+0

Kühl. Zum Beispiel könnte ich "self" als Kontext beim Aufruf von beginAnimations setzen? Ich werde es gleich ausprobieren. – Thanks

1

Die einzige Möglichkeit, verschiedene Animationsdelegaten für mehrere Objekte festzulegen, besteht darin, dass sie aus separaten Unterklassen von UIView bestehen. Da Sie denken, dass +setAnimationDelegate: eine Klassenmethode ist, können Sie keine separaten Animationsdelegaten für verschiedene Instanzen derselben Klasse festlegen.

+0

Das macht Sinn. – Thanks

2

Jeder Animationsblock hat seinen eigenen Delegaten. +[UIView setAnimationDelegate:] und +[UIView setAnimationDidStopSelector:] tun nur etwas, wenn zwischen +[UIView beginAnimations:context:] und +[UIView commitAnimations] aufgerufen, und nur die Animation von diesem Block festgelegt.

Verwandte Themen