Можно ли иметь более одного делегата анимации одновременно? - PullRequest
1 голос
/ 16 мая 2009

Я обеспокоен тем, что это невозможно, потому что + setAnimationDelegate: of UIView - метод класса. Но, может быть, я не прав с этим?

Справочная информация: Проблема в том, что у меня много объектов одного и того же класса, и я хочу реализовать метод, который делает несколько хороших анимаций для этого объекта. Эти анимации немного сложны и состоят из нескольких этапов. Поэтому я должен быть уведомлен, когда анимация остановилась. Теперь может случиться, что 10 объектов этого класса начнут анимироваться одновременно.

Ответы [ 3 ]

2 голосов
/ 16 мая 2009

Каждый блок анимации имеет своего делегата. +[UIView setAnimationDelegate:] и +[UIView setAnimationDidStopSelector:] делают что-либо только при вызове между +[UIView beginAnimations:context:] и +[UIView commitAnimations] и влияют только на анимацию, установленную этим блоком.

1 голос
/ 16 мая 2009

Метод +[UIView beginAnimations:context:] позволяет передавать определенный context, который передается методу завершения. Вы можете использовать этот контекст для устранения неоднозначности между различными экземплярами, когда вызывается метод завершения.

Поскольку контекст имеет тип (void *), он может быть практически любым, каким вы хотите, например указателем на экземпляр объекта, уникальным идентификатором или пользовательской структурой.

Если все ваши объекты реализуют общий протокол, вы можете передать их в виде контекста и в методе animationDidStop, просто вызовите метод, определенный протоколом. Таким образом, даже если у вас есть один метод класса animationDidStop, он может выступать в роли диспетчера метода разветвления.

1 голос
/ 16 мая 2009

Единственный способ установить разные делегаты анимации для нескольких объектов - это сделать их отдельными подклассами UIView. Как вы и думали, поскольку +setAnimationDelegate: является методом класса, вы не можете устанавливать отдельные делегаты анимации для разных экземпляров одного и того же класса.

...