【问题标题】:How to prevent UIView animation for subview auto-resize operations?如何防止子视图自动调整大小操作的 UIView 动画?
【发布时间】:2014-04-04 09:37:24
【问题描述】:

我用

[UIView beginAnimations:nil context:NULL];

UIViewController 的框架设置动画。该视图控制器包含一个UITableView,而UITableView 的单元格是自定义子视图,它也具有自动调整大小的掩码集。

在为父视图控制器设置动画时,帧的变化也会导致该单元格内容的动画,这是预期的,但不是我想要的。我希望这些单元格立即设置它们的新框架,并且我希望整个视图控制器内容作为一个块移动(动画),而不是作为独立对象。

我不能专门为内部内容设置框架,因为这不是单一的视图控制器。有 7 个动画视图控制器(滑动动画)

PS:我不是在寻找视图控制器转换的替代组件,因为我正在做自定义动画。

有没有办法为特定 UIView 或 UIViewController 的自动调整大小操作停止动画?

更新

使用 transitionWithView 仍然会导致子视图通过自动调整大小进行动画处理。堆栈跟踪:

+[UIView(UIViewAnimationWithBlocks) transitionWithView:duration:options:animations:completion:] ()
+[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] ()
-[UIView(Geometry) _applyAutoresizingMaskWithOldSuperviewSize:] ()
-[UIView(Geometry) setFrame:] ()

【问题讨论】:

  • 你能在动画结束前计算子视图帧的新值吗?
  • 看看我更新的答案。

标签: ios objective-c uitableview uiview uiviewanimation


【解决方案1】:

好的。这是我疯狂的想法:

1) 将所有子视图添加到数组中

2) 从父视图中删除所有子视图

3) 创建与旧视图相同大小的新视图并使她透明

4) 将数组中的所有子视图添加到新视图中

5) 将动画应用到持续时间为 0 的新视图(子视图将立即调整大小)

6) 将动画应用到需要持续时间的旧视图

7) 当第 6 步的动画结束时,将子视图移回旧视图

【讨论】:

  • 我已经更新了与transitionWithView 相关的问题。不幸的是,这也无济于事。
猜你喜欢
  • 2013-01-22
  • 2023-04-02
  • 1970-01-01
  • 2014-05-13
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
相关资源
最近更新 更多