对包括导航栏和选项卡栏的视图进行快照
Taking a snapshot of a view including the navigation bar and the tab bar
我正在尝试实现自定义导航控制器转换。转换完成后,fromVC
应该在 toVC
后面可见,因此效果应该看起来像 toVC
出现在 fromVC
之上,部分覆盖它。
因此,为了达到效果,我使用 fromView
的快照并在 animateTransitioning(using:)
方法中将其作为子视图插入到 containerView
。
snapshot = fromVC.view.snapshotView(afterScreenUpdates: false)
containerView.addSubview(self.snapshot!)
但是,问题在于此快照不包括 navigation bar
和 tab bar
。我找到了一些建议使用 UIGraphicsGetImageFromCurrentImageContext()
的答案,但是这个 returns 是 UIImage
。我需要快照是 UIView
才能将其作为子视图插入到 containerView
中。我可以使用它并使用 UIImageView
手动创建一个 UIView
并将其作为子视图插入,但我担心,这对转换来说太 "heavy" 操作了。
如果您知道如何实现,我将不胜感激。
既然 fromVC
当前在屏幕上,为什么不这样做:
let snapshot = UIScreen.main.snapshotView(afterScreenUpdates: false)
这将使用 navigationBar
、tabBar
和 statusBar
拍摄整个屏幕的快照
这将快照并展开根视图,其中包括除状态栏之外的所有内容:
guard let snap = UIApplication.shared.keyWindow!.snapshotView(afterScreenUpdates: true) else {
return
}
我正在尝试实现自定义导航控制器转换。转换完成后,fromVC
应该在 toVC
后面可见,因此效果应该看起来像 toVC
出现在 fromVC
之上,部分覆盖它。
因此,为了达到效果,我使用 fromView
的快照并在 animateTransitioning(using:)
方法中将其作为子视图插入到 containerView
。
snapshot = fromVC.view.snapshotView(afterScreenUpdates: false)
containerView.addSubview(self.snapshot!)
但是,问题在于此快照不包括 navigation bar
和 tab bar
。我找到了一些建议使用 UIGraphicsGetImageFromCurrentImageContext()
的答案,但是这个 returns 是 UIImage
。我需要快照是 UIView
才能将其作为子视图插入到 containerView
中。我可以使用它并使用 UIImageView
手动创建一个 UIView
并将其作为子视图插入,但我担心,这对转换来说太 "heavy" 操作了。
如果您知道如何实现,我将不胜感激。
既然 fromVC
当前在屏幕上,为什么不这样做:
let snapshot = UIScreen.main.snapshotView(afterScreenUpdates: false)
这将使用 navigationBar
、tabBar
和 statusBar
这将快照并展开根视图,其中包括除状态栏之外的所有内容:
guard let snap = UIApplication.shared.keyWindow!.snapshotView(afterScreenUpdates: true) else {
return
}