【问题标题】:My presentation layer does not match my model layer even though I have no animations即使我没有动画,我的表示层也不匹配我的模型层
【发布时间】:2010-04-05 13:41:19
【问题描述】:

在 iPhone 上,我有一个 CALayer,我通过 Core Animation 制作动画。然后在某个时候我改变了视图控制器。然后,我使用CALayer 返回视图控制器,并在viewWillAppear: 中设置我的图层的框架和位置属性以将其移回起点。

设置这些属性会更改模型层,但表示层仍然具有旧值,并且它的表示层在我播放下一个动画之前不会更新。

在 CA 编程指南中它说:

"您可以查询 CALayer 的实例以获取其对应的 动画交易正在进行时的表示层。”

对我来说,这意味着表示层应该只在动画期间与模型层不同。但是目前没有动画正在运行。我什至使用kCATransactionDisableActions 来确保在我设置位置属性时不会启动隐式动画。

有人知道为什么我的表示层和模型层不同步吗?

谢谢。

【问题讨论】:

  • 我也有同样的问题。你找到解决办法了吗? :)

标签: iphone ios core-animation


【解决方案1】:

我使用的一种解决方法是在 viewWillDisappear 中重置图层的位置。我还注意到,如果我不立即为我的图层设置动画,那么它确实会移动到我在 viewWillAppear 中设置的位置。

【讨论】:

  • 一般的问题是,如果我在动画之后设置位置,它只会影响模型层。有没有办法强制表示层“赶上模型层”?
  • 老问题,但这是适合我的解决方案(至少在 iOS 15 上,因为在我看来,每年都有一些 Apple 人搞砸了这个领域)。在图层中,动画完成后,在模型和表示层上调用: setValue(targetValue, forKeyPath: keyPath) BOTH。
【解决方案2】:

听起来 Apple 只是在动画期间使用表示层,并且对其进行了延迟更新。当它没有动画时,它必须使用普通层。我唯一的赌注是他们如何设法线程化 UI 并避免奇怪的错误。它甚至可能与使用哪些线程有关。

您的问题让我们深入了解了 Apple 的引擎盖,也许答案很简单,这就是 Apple 的选择,它也回答了我的一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多