【问题标题】:viewWillDisappear not called in custom NSViewControllerPresentationAnimatorviewWillDisappear 未在自定义 NSViewControllerPresentationAnimator 中调用
【发布时间】: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 - 您可能需要在viewController NSViewController 上使用removeFromParentViewControllerVC 层次结构是 10.10 中的新内容。 view 层次结构已经过时了,除非你使用父子 VC,否则我怀疑它的工作方式会有所不同。
  • 是的,我认为你是对的。

标签: objective-c cocoa


【解决方案1】:

您需要使用[viewController removeFromParentViewController]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多