snapshotView(afterScreenUpdates:true)返回空视图

时间:2017-10-30 21:27:22

标签: ios swift uikit transition navigationcontroller

我想为导航控制器实现自定义推送转换。

我首先实现了UINavigationControllerDelegate,其中我返回了UIViewControllerAnimatedTransitioning的对象。

在本课程中,我想拍摄目标视图的快照,以便为其设置动画。但是,对于push-segue,这不起作用 - 快照是空的。 [当我回弹时,我设置了afterScreenUpdates = false,一切正常]

    guard let fromVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from),
        let toVC = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) else {
            return
    }

    guard let snapshot = toVC.view.snapshotView(afterScreenUpdates: true) else {
        return }

   // Problem:
   // snapshot is an empty view!

2 个答案:

答案 0 :(得分:0)

为-snapshotViewAfterScreenUpdates提供 true :表示需要返回runloop才能实际绘制图像。如果您提供NO,它将立即尝试,但如果您的视图在屏幕外或尚未绘制到屏幕上,则快照将为空。

答案 1 :(得分:0)

我发现有必要在推送转换之后和截取屏幕截图之前引入一个短暂的延迟,比如大约十分之一秒,以避免出现空白屏幕截图。可能这让界面以某种方式稳定下来。