2009-05-15 2 views
1

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

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

ответ

1

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

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

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

+0

Прохладный. Так, например, я мог бы установить «я» в качестве контекста при вызове beginAnimations? Я попробую это сразу. – Thanks

1

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

+0

Это имеет смысл. – Thanks

2

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

Смежные вопросы