首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSAnimationContext结束后如何触发回调?

NSAnimationContext结束后如何触发回调?
EN

Stack Overflow用户
提问于 2008-12-01 11:57:42
回答 6查看 3.5K关注 0票数 4

我有一个动画,可以移动一些视图。当这个动画完成时,我想让窗口重新计算keyview循环。我的代码类似于下面的模拟代码:

代码语言:javascript
复制
[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,但我不知道该怎么做。

EN

回答 6

Stack Overflow用户

发布于 2008-12-01 22:29:31

有一件事不是很明显,或者至少对我来说不是这样,那就是当你做一个setFrame:时,有两个动画在进行,分别是frameSizeframeOrigin

根据原始帧和最终帧的不同,您可能需要将自己注册为其中一个或两个帧的代理。

我还建议您复制从-animationForKey:返回的动画,并将修改后的副本存储在对象的animations字典中。这样,您的代理将仅在特定对象的动画器持续时间结束时调用,而不是所有对象设置该关键点的动画。

例如:

代码语言:javascript
复制
CAAnimation *animation = [[view animationForKey:@"frameOrigin"] copy];
animation.delegate = self;
[view setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"frameOrigin"]];

这样,您的动画对象将取代该视图的默认动画对象。然后实现你感兴趣的任何委托方法。

票数 5
EN

Stack Overflow用户

发布于 2008-12-01 15:17:48

您应该能够向视图发送-animationForKey:以获取CAAnimation实例,然后将您自己设置为它的委托并实现该Adam mentioned的方法。

票数 4
EN

Stack Overflow用户

发布于 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

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/330609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档