首页 > 解决方案 > 没有子视图的快照视图,或访问子视图的方法

问题描述

我有一个 UIView,它有另一个 UIView 作为子视图,我想在用户执行特定操作时为这些视图设置动画,我想使用snapshotView方法来做到这一点。

问题是我无法仅对主视图进行快照,而另一个视图不是其中的一部分,而且我似乎也无法访问子视图来对其进行转换。所以我的问题是,我可以在没有子视图的情况下对 UIView 进行快照,还是可以通过快照访问子视图?

标签: iosswift

解决方案


这是可能方法的简化演示(在快照之前隐藏所有子视图并在完成后立即显示)

extension UIView {
    func snapshotMe() -> UIView? {
        _ = self.subviews.compactMap { $0.isHidden = true }
        defer {
            _ = self.subviews.compactMap { $0.isHidden = false }
        }
        return self.snapshotView(afterScreenUpdates: true)
    }
}

当然,如果您的视图子视图可能已经处于混合隐藏/可见状态,那么在上面提供的扩展中,您必须提前过滤可见的子视图。


推荐阅读