NSPageController转换不好

时间:2017-08-11 11:32:18

标签: swift macos cocoa transition

我的页面控制器转换有问题,看起来像这样

bad transition

这是我的页面控制器的代码

class PageController: NSPageController, NSPageControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self
        arrangedObjects = ["FirstViewController", "SecondViewController"]
    }

    func pageController(_ pageController: NSPageController, identifierFor object: Any) -> String {
        return object as! String
    }

    @IBAction func forward(_ sender: Any) {
        self.navigateForward(self)
    }

    @IBAction func back(_ sender: Any) {
        navigateBack(self)
    }

    func pageController(_ pageController: NSPageController, viewControllerForIdentifier identifier: String) -> NSViewController {
        return storyboard!.instantiateController(withIdentifier: identifier) as! NSViewController
    }

    func pageControllerDidEndLiveTransition(_ pageController: NSPageController) {
        pageController.completeTransition()
    }
}

为什么它看起来像这样,我该怎么做才能实现正常过渡?

1 个答案:

答案 0 :(得分:3)

当您推送新页面时,原始页面仍然在视图层次结构中,因为必须在新页面设置为视图时显示该页面。一旦新视图完全覆盖原始视图,它将被删除。因为第二个视图上有透明背景,所以仍然可以看到下面的按钮。

当您将新页面从屏幕上移开时,下面的视图会添加到层次结构中,以便您可以将其视为顶视图的动画效果。由于顶视图是透明的,因此按钮会在视图动画之前显示。

如果您使视图不透明而不是透明,则无法通过透明背景看到下面的视图,因此它可以按预期工作。