gpt4 book ai didi

objective-c - CATransaction 之后在 ios6 上重复调用 layoutSubviews

转载 作者:可可西里 更新时间:2023-11-01 03:33:55 24 4
gpt4 key购买 nike

我继承了一个过于复杂的项目(所以我不知道所有的内部工作原理),而且我遇到了一个错误。我的应用程序的某些部分有一些用 CATransaction 完成的长动画,这似乎导致在动画处于事件状态时重复调用 layoutSubviews。这不会发生在 ios5 上,一切看起来都是正确的,但在 ios6 上,它会被不间断地调用并干扰 View 的很多布局。堆栈跟踪全部隐藏/变灰,但它似乎以 CA::Transaction::commit()

开头

在 ios 版本之间是否有任何 CATransaction 变化导致这样的事情?

最佳答案

查看这篇文章:UIView/CALayer: Transform triggers layoutSubviews in superview

Apple 通过 TSI 回答了我:

why am I seeing this behavior? is this inconsistency or am I misunderstanding some core concepts?

每当系统感觉发生变化需要 View 重新计算其 subview 的框架时, View 将被标记为布局。这可能比您预期的更频繁地发生,并且系统选择将 View 标记为需要布局的确切时间是一个实现细节。

why does it cascade upwards the view hierarchy?

通常,更改 View (或图层)的几何属性将触发 View 层次结构中的级联布局失效,因为父 View 可能具有涉及修改后的 subview 的自动布局约束。请注意,无论您是否明确启用自动布局,它都会以某种形式处于事件状态。

how can I avoid superview to layoutSubviews every time I'm changing transform?

没有办法绕过这种行为。它是 UIKit 内部簿记的一部分,需要保持 View 层次结构的一致性。

关于objective-c - CATransaction 之后在 ios6 上重复调用 layoutSubviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13652188/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com