gpt4 book ai didi

objective-c - 如何在 NSAnimationContext 结束时触发回调?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:52 24 4
gpt4 key购买 nike

我有一个动画可以移动一些 View 。当此动画完成时,我希望窗口重新计算键 View 循环。我的代码类似于以下模拟代码:

[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 在 View 处于新位置之前被调用,这意味着 keyviewloop 是错误的。

我该如何解决这个问题?

我的第一个想法是在动画结束时的回调中调用 recalculateKeyViewLoop,但我不知道该怎么做。

最佳答案

有一点不是很明显,或者至少对我来说不是,当你使用 frameSize 键执行 setFrame: 时,会出现两个动画和 frameOrigin

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

我还建议您复制从 -animationForKey: 返回的动画,并将修改后的副本存储在对象的 animations 字典中。这样,您的委托(delegate)只会在该特定对象的动画持续时间结束时被调用,而不是所有为该键设置动画的对象。

例如。

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

通过这种方式,您的动画对象将取代该 View 的默认动画对象。然后实现您感兴趣的任何委托(delegate)方法。

关于objective-c - 如何在 NSAnimationContext 结束时触发回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com