【问题标题】:Why does animating a subview cause its parent view's layoutSubviews method to be called?为什么动画子视图会导致其父视图的 layoutSubviews 方法被调用?
【发布时间】:2011-05-25 23:59:51
【问题描述】:

我正在对具有多个我不希望受单视图动画影响的同级视图的单个子视图进行 UIView 动画。但是,当我做动画时,在包含的超级视图上调用layoutSubviews,导致其他兄弟姐妹也被重新排列。

(我应该解释一下,我正在父视图的 layoutSubviews 方法中进行初始子视图布局;我只希望在我第一次设置子视图时调用它,而不是在我单独为它们设置动画时稍后。)

为什么在动画子视图时调用父视图的layoutSubviews 方法?

【问题讨论】:

    标签: iphone


    【解决方案1】:

    我可以想象“对图标网格进行排序”,您只需为一个图标设置动画,其余的会自动运行。

    另一方面:您为正在制作动画的视图设置了哪些自动调整大小的蒙版?也许与此有关。你在制作什么类型的 UIView 动画?也许它改变了形状,因此调用 [self.superview setNeedsLayout] 告诉超级视图它改变了形状。

    其他想法:你的超级视图“autoresizedSubviews”设置了吗?

    【讨论】:

    • 您实际上已经回答了我的一个问题:为什么我的父视图的 layoutSubviews 方法会在其子视图之一发生更改时被调用?我无法弄清楚为什么会发生这种情况。但很明显,如果其中一个子视图改变了形状,你会希望超级视图调用它的 layoutSubviews 方法,让下游的每个人都有机会重新调整。所以现在我只需要弄清楚如何在这种特殊情况下不发生这种情况。
    • 同样,我确实尝试关闭 autoresizesSubviews 但没有帮助。并且父视图及其所有子视图都有 autoresizingMask == UIViewAutoresizingNone。
    • 暂时无法测试,晚上尝试重现
    【解决方案2】:

    我发现即使在视图的图层上设置转换也可以触发视图的 setLayoutSubviews。这也让我感到惊讶,但也许只是因为我现在不需要这种行为。我猜它有时可能会变得很方便……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多