【发布时间】:2022-09-23 09:25:02
【问题描述】:
我正在为应用程序编写一些教程代码,并想制作未选择的标签栏项目的屏幕截图。这是我到目前为止编写的代码:
extension UIView {
var globalFrame: CGRect {
superview?.convert(frame, to: nil) ?? .zero
}
}
extension UIView {
var snapshot: UIImage {
UIGraphicsImageRenderer(size: bounds.size).image { _ in
drawHierarchy(in: frame, afterScreenUpdates: false)
}
}
}
extension UITabBar {
func snapshotDataForTab(atIndex index: Int) -> (UIImage, CGRect) {
var tabs = subviews.compactMap { (view: UIView) -> UIControl? in
if let view = view as? UIControl {
return view
}
return nil
}
tabs.sort(by: { $0.frame.origin.x < $1.frame.origin.x })
return (tabs[index].snapshot, tabs[index].globalFrame)
}
}
主控制器:
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
selectedIndex = 0
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.presentTooltip(forTabAtIndex: 0)
}
}
private func presentTooltip(forTabAtIndex index: Int) {
let dimView = UIView(frame: view.frame)
dimView.backgroundColor = .red
view.addSubview(dimView)
let (image, frame) = tabBar.snapshotDataForTab(atIndex: index)
let imageView = UIImageView(image: image)
imageView.frame = frame
dimView.addSubview(imageView)
}
}
有趣的是,当 selectedIndex 为 0 并且我调用 presentTooltip 为值 0 时,一切都按预期工作。但是,如果我用 1 调用 presentTooltip,则不会呈现任何内容。如果我将 selectedIndex 切换为 1,那么它会反转,并且不会为 presentTooltip 渲染任何内容为 0。
似乎我无法捕获非活动选项卡的快照?
标签: swift uitabbarcontroller uitabbar snapshot