首页 > 解决方案 > 在 UIViewControllerAnimatedTransitioning 中,“to ViewController”存在视图,但“to View”为 nil

问题描述

我正在学习如何在视图控制器之间创建自定义(交互式)转换。当我想以模态方式呈现某些东西时,我已经创建了设置。演示正在工作,但动画完成后以黑屏结束。

我注意到一些奇怪的事情:

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
    let fromV = transitionContext.view(forKey: .from)
    let toV = transitionContext.view(forKey: .to)

    let fromVC = transitionContext.viewController(forKey: .from)
    let toVC = transitionContext.viewController(forKey: .to)
    //....
 }

正如我所料,fromVandfromVC.view引用了相同的视图(在调试器中检查,地址是相同的)。然而toVnil虽然toVC.view有一些(似乎是)有效视图的有效地址。

这怎么可能?他们不应该总是符合相同的价值观吗?

标签: iosswifttransition

解决方案


如果您想访问toView控制器的视图,您将使用

func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
        if let toVC = transitionContext.viewController(forKey: .to) {
            let toView = toVC.view.snapshotView(afterScreenUpdates: true)
        }
        //rest of code
    }

根据文档

此方法非常有效地捕获视图的当前渲染外观并使用它来构建新的快照视图。

希望能帮助到你


推荐阅读