【问题标题】:Taking a snapshot of a view including the navigation bar and the tab bar拍摄包含导航栏和标签栏的视图的快照
【发布时间】:2018-10-02 16:09:52
【问题描述】:

我正在尝试实现自定义导航控制器转换。转换完成后,fromVC 应该在toVC 后面可见,因此效果应该看起来像toVC 出现在fromVC 顶部,部分覆盖它。

所以,为了达到这个效果,我使用了fromView 的快照,并在animateTransitioning(using:) 方法中将其作为子视图插入到containerView

 snapshot = fromVC.view.snapshotView(afterScreenUpdates: false)
 containerView.addSubview(self.snapshot!)

但是,问题在于此快照不包括navigation bartab bar。我找到了一些建议使用UIGraphicsGetImageFromCurrentImageContext() 的答案,但这会返回UIImage。我需要将快照作为UIView 插入到containerView 作为子视图。我可以使用它并使用UIImageView 手动创建UIView 并将其作为子视图插入,但恐怕这对于转换来说太“繁重”了。

如果您知道如何实现这一点,我将非常感谢您的帮助。

【问题讨论】:

  • 听起来您正在拍摄错误的视图。你想快照的不是fromVC,而是它的parent 视图控制器。

标签: ios swift uinavigationcontroller uitabbarcontroller uinavigationbar


【解决方案1】:

这将快照并展开根视图,其中包括除状态栏以外的所有内容:

guard let snap = UIApplication.shared.keyWindow!.snapshotView(afterScreenUpdates: true) else {
    return  
}

【讨论】:

    【解决方案2】:

    既然fromVC 目前在屏幕上,为什么不这样做:

    let snapshot = UIScreen.main.snapshotView(afterScreenUpdates: false)
    

    这将使用navigationBartabBarstatusBar 拍摄整个屏幕的快照

    【讨论】:

    • 是的,但问题是 statusBar 。如果没有它,那将是完美的快照。
    • 查看@slickdaddy 上面的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    相关资源
    最近更新 更多