我正在学习如何在视图控制器之间创建自定义(交互式)转换。我已经创建了设置,当我想呈现一些模式。演示是有效的,但当动画完成时,解雇会以黑屏告终。
我注意到一些奇怪的东西:
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)
//....
}
正如我所期望的,fromV
和fromVC.view
引用了相同的视图(已在调试器中签入,地址相同)。然而,toV
是nil
,而toVC.view
对于有效视图具有一些(似乎)有效地址。
这怎么可能?他们不应该总是有相同的价值观吗?
如果您想访问toView
控制器的视图,您可以使用
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
if let toVC = transitionContext.viewController(forKey: .to) {
let toView = toVC.view.snapshotView(afterScreenUpdates: true)
}
//rest of code
}
根据文件
此方法非常有效地捕获当前渲染的外观并使用它来构建新的快照视图。
希望它能帮助