我有一个动画,可以移动一些视图。当这个动画完成时,我想让窗口重新计算keyview循环。我的代码类似于下面的模拟代码:
[NSAnimationContext beginGrouping];
[newView setAlpha: 0.0]; //hide newView
[self addSubView:newView];
//position the views
[[oldView animator] setFrame: newFrame1];
[[newView animator] setFrame: newFrame2];
[[newView animator] setAlpha: 1.0]; //fade-in newView
[NSAnimationContext endGrouping];
[[self window] recalculateKeyViewLoop];这段代码的问题是在视图位于新位置之前调用recalculateKeyViewLoop,这意味着keyviewloop是错误的。
我该如何解决这个问题?
我的第一个方法是在动画结束时在回调中调用recalculateKeyViewLoop,但我不知道该怎么做。
发布于 2008-12-01 22:29:31
有一件事不是很明显,或者至少对我来说不是这样,那就是当你做一个setFrame:时,有两个动画在进行,分别是frameSize和frameOrigin。
根据原始帧和最终帧的不同,您可能需要将自己注册为其中一个或两个帧的代理。
我还建议您复制从-animationForKey:返回的动画,并将修改后的副本存储在对象的animations字典中。这样,您的代理将仅在特定对象的动画器持续时间结束时调用,而不是所有对象设置该关键点的动画。
例如:
CAAnimation *animation = [[view animationForKey:@"frameOrigin"] copy];
animation.delegate = self;
[view setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"frameOrigin"]];这样,您的动画对象将取代该视图的默认动画对象。然后实现你感兴趣的任何委托方法。
发布于 2008-12-01 15:17:48
您应该能够向视图发送-animationForKey:以获取CAAnimation实例,然后将您自己设置为它的委托并实现该Adam mentioned的方法。
发布于 2008-12-01 13:00:57
如果使用CAAnimation,则会有一个animationDidStop:finished: delegate方法。
http://developer.apple.com/documentation/GraphicsImaging/Reference/CAAnimation_class/Introduction/Introduction.html#//apple_ref/occ/cl/CAAnimation
希望这能有所帮助
https://stackoverflow.com/questions/330609
复制相似问题