UIView 的 snapshotViewAfterScreenUpdates:,确定是否需要将 afterScreenUpdates 设置为 YES。

5
如果您在一个未被显示的视图上调用 [view snapshotViewAfterScreenUpdates:NO],您会得到以下结果:

对尚未渲染的视图进行快照操作将导致空白的快照。请确保您的视图至少已经渲染了一次再进行快照或者在屏幕更新后再进行快照。

通过将参数改为 YES 可以解决这个问题,这也是有道理的。 传递 YES 会降低性能,并且我只需要在尚未显示时使用“after screen updates”。是否有一种方法可以知道传递 NO 会导致该错误的情况,以便我只在这种情况下传递 YES?
我尝试过 [view snapshotViewAfterScreenUpdates:view.layer.needsDisplay],但没有成功。

你最好使用 UIViewController 来创建该视图。在这种情况下,你可以使用 viewDidLoadviewDidAppear 方法。如果不行的话,你可以使用视图的代理方法,例如 willMoveToSuperview 等。然后在相应的方法中使用快照 API。 - esh
3个回答

2

我认为UIView不能暴露它是否有未渲染的更改。通常情况下,当我知道(基于上下文),该视图已经显示时,例如创建一个即将被删除的视图的快照时,我只会传递NO


0

应该设置为YES,以适应这样的情况:当您的视图尚未完成其动画或完成渲染更改(设置新的背景颜色),并且用户执行了一些操作以调用快照时。如果您确定您的快照方法将在视图完成渲染时被调用,或者您可以承受快照未完成渲染的视图,则可以将其设置为NO


0

我在使用widhtAnchor和heightAnchor设置我的视图上的TextField时遇到了相同的问题。 Snapshot错误已经消失...

在Swift 5中,我放置了这个:

private func setupUI() {
    view.setNeedsDisplay()
    view.snapshotView(afterScreenUpdates: true)

...


具体在哪里?viewDidLoad方法中吗? - Jalil
1
在我的情况下,我会在viewDidLoad中插入代码。 - Brave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接