Ios 不带子视图的快照视图,或访问子视图的方法

Ios 不带子视图的快照视图,或访问子视图的方法,ios,swift,Ios,Swift,我有一个UIView,它有另一个UIView作为子视图,我想在用户执行特定操作时设置这些视图的动画,我想使用该方法来实现这一点 问题是,我无法仅快照主视图而不将另一个视图作为它的一部分,而且我似乎也无法访问子视图来转换它。所以我的问题是,我可以在没有子视图的情况下对UIView进行快照,还是可以通过快照访问子视图?一旦对视图进行快照,它本质上就是一个展平的图像。因此,作为一种解决方法,您可以从视图中删除子视图,对视图进行快照,然后将子视图放回原处。或者您可以快照子视图。或者你可以同时做这两件事。

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


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

一旦对视图进行快照,它本质上就是一个展平的图像。因此,作为一种解决方法,您可以从视图中删除子视图,对视图进行快照,然后将子视图放回原处。或者您可以快照子视图。或者你可以同时做这两件事。

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


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

您想要哪种动画?
extension UIView {
    func snapshotMe() -> UIView? {
        _ = self.subviews.compactMap { $0.isHidden = true }
        defer {
            _ = self.subviews.compactMap { $0.isHidden = false }
        }
        return self.snapshotView(afterScreenUpdates: true)
    }
}