1

我正在使用 UIScrollView,其内容是一个简单的 UIView 子类,其大小使用自动布局设置,并使用 drawRect: 来呈现其内容,而不是拥有自己的子视图。

如果 UIView 的内容(和大小)发生变化,那么一切都会按预期进行。如果内容的大小现在需要/不再需要滚动,新内容会立即出现,并且 UIScrollView 的可滚动性启用/禁用。

但是,如果屏幕上的其他地方正在播放动画,则事情将不再按预期工作。

在这种情况下,对 UIView 的更改将与其他动画一起进行动画处理。

因此,如果其他动画需要 2 秒,则新的 UIView 内容会立即重绘,但会按一定比例重新绘制,以使其适合旧内容的大小。然后它对内容进行动画处理,在 2 秒内增长(或缩小),以便在动画结束时其大小达到应有的大小。

有问题的“干扰”动画师在食物链中由 ViewController 拥有,并且 UIScrollView 及其内容 UIView 从未被告知 UIViewPropertyAnimator。

仅当内容更改与动画重叠时才会出现问题。如果该其他动画已完成(或尚未开始),则滚动视图中的内容会立即更新。

有没有人对此有所了解,或者也许可以建议一种方法来强制 UIScrollView 和/或其内容视图始终做自己的事情,并且如果一些不相关的 UIViewPropertyAnimator 在其他地方出现,则不要随顺?

编辑:一些额外的信息

动画代码较旧,最初使用 UIView.Animate 和一些滑动手势触发动画。在这种情况下,即使动画和内容大小更改重叠(使用完全相同的重现场景),新的(滚动内容)大小也会立即出现,并且不会链接到 UIView.Animate 动画。在 UIViewPropertyAnimator 代码中交换(并且不涉及任何手势识别器)触发问题并且内容大小更改变为动画。

4

0 回答 0