Objective c NSView在动画之后删除
我不知道为什么它被证明是如此困难,但基本上我想在我的屏幕上动画NSView,一旦它完成动画,删除该NSView。然而,我似乎完全找不到关于如何做到这一点的参考资料。有人能帮忙吗 我是这样开始我的动画的Objective c NSView在动画之后删除,objective-c,xcode,macos,nsview,Objective C,Xcode,Macos,Nsview,我不知道为什么它被证明是如此困难,但基本上我想在我的屏幕上动画NSView,一旦它完成动画,删除该NSView。然而,我似乎完全找不到关于如何做到这一点的参考资料。有人能帮忙吗 我是这样开始我的动画的 NSRect frame = blob.frame; frame.origin.x = animationStopX; [NSAnimationContext beginGrouping]; [[NSAnimationContext currentContext] setDuration:time
NSRect frame = blob.frame;
frame.origin.x = animationStopX;
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:timeToDisappear];
[[blob animator] setFrame:frame];
[NSAnimationContext endGrouping];
一旦它完成了,我没有办法从中得到回调 在您的
开始分组
语句之后,添加以下内容:
[[NSAnimationContext currentContext] setCompletionHandler:^{
[self.blob removeFromSuperview];
}];
setCompletionHandler:
是NSAnimationContext
类中的一个方法。在您的开始分组
语句之后,添加以下内容:
[[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];
});
在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];
});
啊,老兄,我真希望我几天前就看到了。最后,我创建了一个单独的运行循环,它只是解析并检查了一些属性。如果满足某些条件,我最终会移除该对象。下次尝试执行类似操作时,我会记住这一点。setCompletionHandler适用于OS X 1.7及更高版本。请记住,即使动画被“取消”,也会调用“setCompletionHandler”,也就是说,如果您有一个事件触发另一个方法调用,而该方法的动画为“blob”,并且在其“setCompletionHandler”中,您可以[self.view addSubview self.blob],你可能会在SpinLock中挂起你的应用程序,或者即使你刚刚添加了它,你也可能会产生不希望的结果,例如删除视图。这是因为应用程序可能会暂停主线程,优先处理另一个调度呼叫,并使两个“取消块”发生故障。啊,伙计,我希望我几天前就看到了。我最终生成了一个单独的运行循环,该循环只是解析并检查了一些属性。如果满足某些条件,我最终会删除该对象。下次尝试执行类似操作时,我会记住这一点。setCompletionHandler适用于OS X 1.7及更高版本。请记住,即使动画n已被“取消”,即,如果您有一个事件触发另一个对方法的调用,该方法将激活“blob”,并在其“setCompletionHandler”中激活[self.view addSubview self.blob],你可能会在SpinLock中挂起你的应用程序,或者你可能会有不希望的结果,例如,即使你刚刚添加了视图,也会删除它。这是因为应用程序可能会暂停主线程,优先处理另一个调度调用,并按顺序调用两个“取消块”。