我正在制作一个视图(通过揭示它),之后我需要发布一个通知(一旦动画完成)。然而,应用程序的设计方式,隐藏视图(通过动画)时会发出另一个通知。基本上我有一个'showView'和'hideView'方法。每个人都这样做:
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
[context setDuration: 0.25];
[[myView animator] setAlphaValue: 0];
} completionHandler:^{
// post notification now
}];
问题在于,在后台的另一个线程中,我有一个定期计时器,它执行“健全性检查”,以查看是否需要隐藏视图(如果不需要)。这是一种积极的方法,但必要的是应用程序的许多组件响应不同的事件和场景。由于这个原因,我有时会得到一个“竞争条件”,用户点击了“showView”,但同时我们的一个线程认为应该立即隐藏视图。
当两者都在主线程上发布通知时,应用程序会在SpinLock中无限期挂起。如果我能够弄清楚上面的动画块是否被“取消”(即在同一视图上执行的另一个动画块),我可以完全避免这种情况。在这种情况下,我不会发布通知,然后不会强制检查。
长话短说:我需要能够检查动画成功结束后是否调用'completionHandler',或者是否取消了。我知道在iOS中这是可能的,但我在OS X中找不到任何方法。请帮忙。
答案 0 :(得分:0)
我遇到了类似的问题。我通过使用free
实例变量解决了该问题。
num2
快速版本:
currentAnimationUUID