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 使用动画块转换视图的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 9 上使用 NavigationController 进行推送动画的自定义转换