提问人:Andrei Herford 提问时间:2/28/2023 最后编辑:Andrei Herford 更新时间:3/1/2023 访问量:19
如何创建/捕获UITTabBarItems的图像或快照?
How to create / capture image or snapshot of UITTabBarItems?
问:
我想创建一个演练,如下图所示:
创建半透明覆盖层没什么大不了的。但是如何突出显示如图所示的tabBar项呢?
1. 尝试
我的第一次尝试是创建一个标签栏项目,并将其放置在背景上与实际标签栏项目相同的位置:snapshot
let tabBarItemViews = tabBar.subviews.filter({$0.isUserInteractionEnabled}).sorted(by: {$0.frame.minX < $1.frame.minX})
let firstButtonView = tabBarItemViews[0]
let snapshot = firstButtonView.snapshotView(afterScreenUpdates: true)
backgroundView.addSubview(snapshot)
snapshot.frame = backgroundView.convert(firstButtonView.frame, from: firstButtonView.superview!)
这工作正常,第一个 tabBar 按钮的副本/快照显示在背景视图的正确位置。
但:这不适用于其他未选择的 tabBar 按钮。快照为空,不显示任何内容。它具有正确的框架尺寸,并且不是 nil,但未显示任何内容。
2. 尝试
我过去没有创建一个 我曾经使用这个扩展来捕获屏幕截图/图像:snapshot
extension UIView {
func asImage() -> UIImage {
if #available(iOS 10.0, *) {
let renderer = UIGraphicsImageRenderer(bounds: bounds)
return renderer.image { rendererContext in
layer.render(in: rendererContext.cgContext)
}
} else {
UIGraphicsBeginImageContext(self.frame.size)
self.layer.render(in:UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIImage(cgImage: image!.cgImage!)
}
}
}
代码与第一次尝试时几乎相同:
...
let imageView = UIImageView(firstButtonView.asImage())
backgroundView.addSubview(imageView)
imageView.frame = backgroundView.convert(firstButtonView.frame, from: firstButtonView.superview!)
结果也是一样的:它对活动选项卡栏项目工作正常,但为所有其他项目提供空结果......
如果我在 tabBar 本身上使用扩展,结果是相同的:它创建一个完整 TabBar 的图像,该图像仅显示第一个/活动按钮。asImage()
由于某种原因,无法捕获非活动选项卡栏项目。
有什么技巧可以解决这个问题吗?
答: 暂无答案
评论