是否可以同时拥有多个动画代表?

时间:2009-05-15 23:18:04

标签: iphone cocoa-touch uikit core-animation

我担心这是不可能的,因为UIView的+ setAnimationDelegate:是一个类方法。但也许我错了?

背景: 问题是,我有很多同一个类的对象,我想实现一个专门为该对象做一些漂亮动画的方法。这些动画有点复杂,包含几个阶段。所以我需要在动画停止时收到通知。现在,可能会发生该类中的10个对象同时开始动画。

3 个答案:

答案 0 :(得分:2)

每个动画块都有自己的委托。 +[UIView setAnimationDelegate:]+[UIView setAnimationDidStopSelector:]仅在+[UIView beginAnimations:context:]+[UIView commitAnimations]之间调用时执行任何操作,并且仅影响该块设置的动画。

答案 1 :(得分:1)

为多个对象设置不同动画委托的唯一方法是让它们成为UIView的独立子类。如您所想,由于+setAnimationDelegate:是一个类方法,因此无法为同一个类的不同实例设置单独的动画委托。

答案 2 :(得分:1)

+[UIView beginAnimations:context:]方法允许您传递传递给完成方法的特定context。调用完成方法时,可以使用该上下文在各种实例之间进行分离。

由于上下文被键入为(void *),因此它几乎可以是您想要的任何内容,即指向对象实例,唯一ID或自定义结构的指针。

如果您的对象都实现了一个通用协议,您可以将它们作为上下文传递,并在animationDidStop方法中,只需调用协议定义的方法。因此,即使您有一个单一的类范围animationDidStop方法,它也可以充当扇出方法调度程序。