【发布时间】:2015-04-15 08:39:29
【问题描述】:
我在 Cocoa 应用程序中有一个简单的自定义动画制作器,我在使用 NSViewControllerPresentationAnimator 协议呈现新视图控制器时使用它。但是,除非我在删除视图 viewWillDisappear 时手动调用 viewWillDisappear 并且不会在被关闭的视图控制器上调用 viewDidDisappear。
我是否遗漏了什么,就像我知道在 iOS 上您需要在转换完成时告诉系统一样?在协议文档中找不到任何相关内容。
这是我今天的实现,如您所见,我手动调用 viewWillDisappear。为什么我需要这样做?
- (void)animateDismissalOfViewController:(NSViewController *)viewController fromViewController:(NSViewController *)fromViewController {
NSView *bottomView = fromViewController.view;
NSView *topView = viewController.view;
topView.wantsLayer = YES;
topView.layerContentsRedrawPolicy = NSViewLayerContentsRedrawOnSetNeedsDisplay;
[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
context.duration = 0.5;
bottomView.animator.alphaValue = 1;
topView.animator.alphaValue = 0;
}
completionHandler:^{
[topView removeFromSuperview];
[viewController viewWillDisappear];
}];
}
【问题讨论】:
-
我可以推测。如果你说它毫无价值,我会删除它。您在
NSView上调用removeFromSuperview- 您可能需要在viewControllerNSViewController上使用removeFromParentViewController。 VC 层次结构是 10.10 中的新内容。 view 层次结构已经过时了,除非你使用父子 VC,否则我怀疑它的工作方式会有所不同。 -
是的,我认为你是对的。
标签: objective-c cocoa