我担心这是不可能的,因为UIView的+ setAnimationDelegate:是一个类方法。但也许我错了?
背景: 问题是,我有很多同一个类的对象,我想实现一个专门为该对象做一些漂亮动画的方法。这些动画有点复杂,包含几个阶段。所以我需要在动画停止时收到通知。现在,可能会发生该类中的10个对象同时开始动画。
答案 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
方法,它也可以充当扇出方法调度程序。