+[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,然后执行操作