当前位置:  开发笔记 > 编程语言 > 正文

NSAnimationContext结束时如何触发回调?

如何解决《NSAnimationContext结束时如何触发回调?》经验,为你挑选了1个好方法。

我有一个动画可以移动一些视图.当这个动画完成时,我希望窗口重新计算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从动画结束时调用回调,但我无法弄清楚如何做到这一点.



1> Ashley Clark..:

一些不那么明显的东西,或者至少不是我的东西,就是当你setFrame:用钥匙frameSize和钥匙做时,有两个动画正在进行frameOrigin.

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

我还建议您复制一下您从中获取的动画-animationForKey:,并将修改后的副本存储在animations对象的字典中.这样,只有在特定对象的动画持续时间结束时,才会调用您的代理,而不是动画该键的所有对象.

例如.

CAAnimation *animation = [[view animationForKey:@"frameOrigin"] copy];
animation.delegate = self;
[view setAnimations:[NSDictionary dictionaryWithObject:animation forKey:@"frameOrigin"]];

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

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有