NSView删除动画后
问题描述:
我不知道为什么它被证明是如此困难,但基本上我想在我的屏幕上为NSView制作动画,并且一旦完成该动画,就移除该NSView。但似乎我完全没有提到如何做到这一点。有人可以帮忙吗?NSView删除动画后
我开始我的动画这样
NSRect frame = blob.frame;
frame.origin.x = animationStopX;
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:timeToDisappear];
[[blob animator] setFrame:frame];
[NSAnimationContext endGrouping];
我没有从这个得到一个回调,一旦它完成或任何方式。
答
您beginGrouping
声明后立刻补充一点:
[[NSAnimationContext currentContext] setCompletionHandler:^{
[self.blob removeFromSuperview];
}];
setCompletionHandler:
在NSAnimationContext
类的方法。
答
万一10.6或以下(因此NSAnimationContext的completionHandler
)不是这种方法只使用块和10.6+将工作的一个选项:
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[mySubView removeFromSuperview];
});
噢人,我希望我能有这个前几天看到。我最终创建了一个单独的运行循环,只是解析并检查了一些属性。如果满足某些条件,我最终删除了该物体。 下次我尝试做这样的事情时,我会记住它。 – MZimmerman6 2012-05-01 15:13:24
setCompletionHandler适用于OS X 1.7及更高版本。 – RocketMan 2012-07-25 17:14:27
请记住,即使动画被“取消”,也会调用“setCompletionHandler”,即如果您有另一个事件触发另一个调用动画blob的方法,并且在其setCompletionHandler中,您将自动调用setApletionHandler [self.view addSubview self .blob],您可能最终会将您的应用挂在SpinLock上,或者您可能会收到不良结果,例如删除视图,即使您刚添加它。这是因为应用程序可以暂停mainThread,优先考虑另一个调度呼叫,并且按顺序调用两个“取消块”。 – strange 2013-09-12 19:53:38