viewWillDisappear未在自定义NSViewControllerPresentationAnimator中调用

时间:2015-04-10 12:50:02

标签: objective-c cocoa

我在使用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];
            }];

}

1 个答案:

答案 0 :(得分:1)

您需要使用[viewController removeFromParentViewController]

您无法通过在NSViewController NSView上调用removeFromSuperview方法NSViewController来触发view生命周期方法。您必须使用NSViewController方法。