我在使用NSViewControllerPresentationAnimator
协议呈现新视图控制器时使用的Cocoa应用程序中有一个简单的自定义动画师。但是,除非我在删除视图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];
}];
}
答案 0 :(得分:1)
您需要使用[viewController removeFromParentViewController]
。
您无法通过在NSViewController
NSView
上调用removeFromSuperview
方法NSViewController
来触发view
生命周期方法。您必须使用NSViewController
方法。