iOS 使用动画块转换视图

Posted

技术标签:

【中文标题】iOS 使用动画块转换视图【英文标题】:iOS transitioning views using animation blocks 【发布时间】:2012-02-21 19:47:28 【问题描述】:

我正在尝试在 2 个子视图之间制作动画。目前我尝试了不同的选择,每种都有自己的副作用。

应用程序是一个小游戏,具有技能子视图、库存子视图和状态子视图。我想在技能和库存视图之间制作动画,同时将状态子视图留在主视图的底部。下面我列出了我的各种尝试以及它们的副作用。

来自`animateWithDuration的动画

[UIView animateWithDuration:0.3 delay:0.3 options:UIViewAnimationOptionTransitionFlipFromRight | UIViewAnimationCurveEaseIn animations:^ skillView.hidden = NO; inventoryView.hidden = YES; completion:NULL]; 似乎没有发生任何转换。视图立即弹出。

来自transitionFromView的动画

[UIView transitionFromView:inventoryView toView:skillView duration:0.5 options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) inventoryView.hidden = YES; ]; 转换已完美完成,但状态视图会与其他视图一起转换。几乎就好像主视图正在为所有内容设置动画一样。

视图被加载到隐藏在背景中的主视图中,它们过去只是弹出到主窗口中。但是,我想在视图之间制作动画以获得更好的应用程序流程。我见过人们删除并添加到主视图,但我希望将子视图设置为可见/不可见应该具有相同的效果。

非常感谢任何建议。

【问题讨论】:

您是否尝试将UIViewAnimationOptionShowHideTransitionViews 选项与transitionFromView:... 方法一起使用? (例如,添加两个视图但隐藏一个 - 然后使用该选项调用 transitionFromView:... 我必须在动画块中添加两个视图吗?如果是这样,那么如果我必须切换回来,它将如何工作?我可以调用类似的设置还是必须删除麻烦的视图并将它们重新添加? 该选项 (UIViewAnimationOptionShowHideTransitionViews) 改变了 transitionFromView:... 的工作方式。通常,该方法实际上修改了fromView 的父视图层次结构(删除fromView 并添加toView)。要使用我引用的选项,只需在调用方法之前确保两个视图都在视图层次结构中 - 并确保它们位于您提到的状态子视图之上。要走相反的方向,只需翻转参数... toView 变为 fromView ,反之亦然。 在翻转子视图时,看起来好像整个窗口都在翻转。 是否可以将两个视图都放在一个容器视图中?例如一个只包含你想要动画的两个视图的 UIView? 【参考方案1】:

Core Animation 不知道如何为这些视图设置动画,除了它们的直接祖先(父级)。

将它们分解为单个容器视图。

例如:

这个:

Parent
 - Other View
 - View A
 - View B
 - Other View

有这个:

Parent
 - Other View
 - Container
   - View A
   - View B
 - Other View

查看 cmets 以获取更多详细信息。

【讨论】:

以上是关于iOS 使用动画块转换视图的主要内容,如果未能解决你的问题,请参考以下文章

视图控制器转换动画子视图位置

带有完成块和属性的自定义 segue 转换

在自定义视图控制器转换中抑制导航推送动画

在 iOS 9 上使用 NavigationController 进行推送动画的自定义转换

iOS 11:带有不透明导航栏的导航控制器内带有滚动视图的弹出视图控制器在转换期间导致奇怪的内容动画

更改导航控制器 ios 的转换