我正在iPhone中创建一个应用程序,我有几个UIViews和图层.我正在使用CAKeyframeAnimation类做一些动画,因为动画必须链接,我已经覆盖了UIView中的animationDidStop方法.
我正在得到正确的回调,但是我无法弄清楚如何找到哪个动画结束以便我可以开始下一个动画.只有回调函数的参数是CAAnimation对象和布尔值.
我可以通过在类中设置属性并使用枚举来处理我使用的各种动画来解决此问题.但是我只是想知道回调中是否有任何内置属性,我可以在CAKeyframeAnimation对象中设置它们,然后在回调中引用它.
任何帮助将不胜感激!
您可以为动画指定名称,并在委托方法中读取它.
[animation setValue:"firstAnimation" forKey:@"name"];
...
- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished { if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) { ... } }
我知道你说你正在使用CAKeyframeAnimations,但是如果你想要的UIView属性(起源,范围,阿尔法等)的简单的动画,你可以用在开始/提交块属性或特性的变化,并指定完成动画时调用的委托方法.只要委托方法有三个参数,您可以随意调用它.例如:
[UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; [UIView setAnimationDelegate:self]; [UIView setAnimationDidStopSelector:@selector(yourAnimationHasFinished:finished:context:)]; // Change property or properties here [UIView commitAnimations];
将导致该方法
- (void)yourAnimationHasFinished:(NSString *)animationID finished:(BOOL)finished context:(void *)context;
被称为.这允许的任意命名将为您提供一种分离处理以完成不同动画的方法.我更喜欢这个简单的动画.
对于处理更复杂的动画直接与CALayers的animationDidStop交互的:完成:委托方法不返回已完成的动画对象.如果你正在一个实例,它是对多个动画的委托,您可以创建动画和NSNumbers的一个NSMutableDictionary在animationDidStop在开关语句使用:完成:方法.当你创建CAKeyframeAnimation,使用的setObject:forKey:将其分配到与其匹配的号码,然后使用objectForKey:找到对应于完成方法动画的数量和哺养到switch语句.