+[UIView transitionFromView:toView:...] 有多个视图

Posted

技术标签:

【中文标题】+[UIView transitionFromView:toView:...] 有多个视图【英文标题】:+[UIView transitionFromView:toView:...] with multiple views 【发布时间】:2014-10-30 09:37:17 【问题描述】:

所以情况是这样的:

假设有 20 个视图都是同一视图的子视图。现在我想在动画中删除和添加新视图。 我以前通过使用常规 UIView 动画并分别淡出或淡入来做到这一点。问题在于,当要插入的新子视图与淡出的子视图重叠时,动画并非完美无缺。所以我尝试使用+[UIView transitionFromView:toView:...] 动画块来使动画交叉溶解。这很好用,动画看起来不错。 这基本上解决了我的问题。唯一的问题是我可能想用一个更大的子视图替换 2 个子视图。这并没有真正奏效,因为我不能只将nil 传递给转换方法。

所以我的问题基本上是,无论动画有多少视图,我如何同时交叉溶解多个子视图?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您是否尝试过将要删除的视图放入透明的大视图中?所以你只需使用容器调用transitionFromViewToView,里面有2个小容器和正在进入的大容器?

【讨论】:

我确信这会起作用,但在我的情况下也会相当复杂。我想我还是更喜欢不太完美的动画而不是如此复杂的解决方案。【参考方案2】:

您可以使用+ [UIView transitionWithView:duration:options:animations:completion:],传递通用的超级视图(通常是您的视图控制器的self.view)来一次执行所有动画。

摘自文档:

此方法将过渡应用于指定视图,以便您可以 对其进行状态更改。您在动画中指定的块 参数包含您想要进行的任何状态更改。 你可以 使用此块添加、删除、显示或隐藏指定的子视图 如果您想合并其他动画更改,您必须 将 UIViewAnimationOptionAllowAnimatedContent 键包含在 选项参数。

【讨论】:

我知道这种方法,但如果我认为这不是我想要的。此方法为超级视图设置动画,因此,除非我犯了错误,否则它会为每个视图设置动画,而不仅仅是我在块中添加/删除的视图。

以上是关于+[UIView transitionFromView:toView:...] 有多个视图的主要内容,如果未能解决你的问题,请参考以下文章

在 UIView2 上方显示 UIView1,但在 UIView1 上方显示 UIView2 输入方式

统计从多个 UIView 中随机抽出的 UIView 数量,即:从 9 个 UIView 中随机抽出 5 个 UIView,然后执行操作

UIView 类别 - 自定义方法不返回 UIView

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

UIView - 啥覆盖将允许更新 UIView 框架

UIView 中的 UIView 问题