我正在iPhone中创建一个应用程序,我有几个UIViews和图层。我正在使用CAKeyframeAnimation类做一些动画,因为动画必须链接,我已经覆盖了UIView中的animationDidStop方法。
我正在接受回调,但是我无法弄清楚如何找到哪个动画结束以便我可以开始下一个动画。只有回调函数的参数是CAAnimation对象和布尔值。
我可以通过在类中设置属性并对我使用的各种动画使用枚举来解决此问题。但是我只是想知道回调中是否有任何内置属性,我可以在CAKeyframeAnimation对象中设置,然后在回调中引用它。
非常感谢任何帮助!
答案 0 :(得分:13)
您可以为动画指定名称,并在委托方法中阅读。
[animation setValue:"firstAnimation" forKey:@"name"];
...
- (void)animationDidStop:(CAAnimation*)animation finished:(BOOL)finished {
if([[animation valueForKey:@"name"] isEqual:@"firstAnimation"] && finished) {
...
}
}
答案 1 :(得分:11)
我知道你说你正在使用CAKeyframeAnimations,但如果你想要UIView属性的简单动画(原点,边界,alpha等),你可以在开始/提交中包装属性或属性的更改阻止并指定在完成动画时调用的委托方法。只要委托方法有三个参数,您可以随意调用它。例如:
[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:finished:delegate方法确实返回已完成的动画对象。如果要创建一个作为多个动画的委托的实例,则可以创建动画的NSMutableDictionary和NSNumbers,以便在animationDidStop:finished:方法中的switch语句中使用。在创建CAKeyframeAnimation时,使用setObject:forKey:将其分配给匹配的数字,然后使用objectForKey:在完成方法中查找与该动画对应的数字,并将其提供给switch语句。