我知道您说您正在使用 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: 委托方法确实返回已完成的动画对象。如果您正在创建一个实例作为多个动画的委托,您可以创建动画和 NSNumbers 的 NSMutableDictionary 以在 animationDidStop:finished: 方法中的 switch 语句中使用。在创建 CAKeyframeAnimation 时,使用 setObject:forKey: 将其分配给其匹配编号,然后使用 objectForKey: 在完成方法中找到与该动画对应的编号,并将其输入到 switch 语句中。