【问题标题】:UIView's snapshotViewAfterScreenUpdates:, determine if afterScreenUpdates needs to be YESUIView的snapshotViewAfterScreenUpdates:,判断afterScreenUpdates是否需要为YES
【发布时间】:2014-05-20 21:24:04
【问题描述】:

如果您在尚未显示的视图上调用 [view snapshotViewAfterScreenUpdates:NO],您会得到:

对尚未渲染的视图进行快照会导致快照为空。确保您的视图在快照之前或屏幕更新后的快照之前至少渲染过一次。

这可以通过将参数更改为 YES 来解决,这是有道理的。通过 YES 会影响性能,除非尚未显示,否则我不需要“屏幕更新后”。有没有办法知道什么时候传入 NO 会导致该错误,以便我只能在那种情况下传入 YES?

我尝试了[查看 snapshotViewAfterScreenUpdates:view.layer.needsDisplay],但没有成功。

【问题讨论】:

  • 您最好的选择可能是使用UIViewController 表示视图。在这种情况下,您将使用 viewDidLoadviewDidAppear。如果没有,您可以使用视图的委托方法,例如 willMoveToSuperview 或其他东西。然后在相应的方法中使用快照 API。

标签: ios uiview calayer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    它应该是YES 来满足以下情况:当您的视图尚未完成其动画或完成渲染更改(设置新的背景颜色)并且用户执行了一些调用快照的操作时。如果您确定当您的视图完成渲染时将调用您的快照方法,或者您可以对未完成的渲染视图进行快照,那么您可以将其设置为NO

    【讨论】:

      【解决方案3】:

      我在使用 widhtAnchor 和 heightAnchor 设置 TextFiled 时遇到了同样的问题。快照错误已消失...

      在 Swift 5 上我这样写:

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

      ...

      【讨论】:

      • 具体在哪里? viewDidLoad?
      • 就我而言,我在 viewDidLoad 上插入。
      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-14
      • 1970-01-01
      • 2010-10-18
      • 2015-04-08
      相关资源
      最近更新 更多