【问题标题】:snapshotView(afterScreenUpdates: true) returns an empty viewsnapshotView(afterScreenUpdates: true) 返回一个空视图
【发布时间】:2018-04-11 23:24:07
【问题描述】:

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

我首先实现了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!

【问题讨论】:

  • 我也是这样,你解决了吗?

标签: ios swift uikit transition navigationcontroller


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    为 -snapshotViewAfterScreenUpdates: 提供 true 意味着它需要返回运行循环才能实际绘制图像。如果您提供 NO,它将立即尝试,但如果您的视图不在屏幕上或尚未绘制到屏幕上,则快照将为空。

    【讨论】:

    • 这意味着它需要返回到 runloop 才能真正绘制图像“ -​​ 你有提示如何实现这一点吗?
    • @Pascal 你可以使用 true 来实现这一点,但是如果你想立即看到图像,你应该使用 false 来表示 -snapshotViewAfterScreenUpdates:
    猜你喜欢
    • 2023-03-31
    • 2019-11-12
    • 1970-01-01
    • 2015-09-20
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多