我有一个具有以下层次结构的视图控制器:
的UIViewController
|
| - 视图
| -presentView(UIView)
| -stagedView(UIView)
| -UIToolbar
我正在使用transitionFromView:toView:duration:options:completion:
方法为页面卷曲设置动画,以便在presentView
和stagedView
之间进行切换。当前和分段视图仅涵盖屏幕的 大多数 ,底部有一个UIToolbar。当我使用UIViewAnimationOptionTransitionCurlUp
转换时,它会为整个根视图(包括工具栏)设置动画,而不仅仅是所涉及的两个视图。
[UIView transitionFromView:self.presentView
toView:self.stagedView
duration:0.5f
options:UIViewAnimationOptionTransitionCurlUp
completion:^ (BOOL finished) {
if (finished) {
// cleanup code
}}];
答案 0 :(得分:3)
我一直在努力解决这个问题,我解决它的唯一方法就是将fromView放到另一个视图中。在您的情况下,视图层次结构应如下所示:
UIViewController | |-view |-containerView |-presentView |-stagedView |-UIToolBar
fromView 参数仍应指向presentView。希望这会有所帮助。
答案 1 :(得分:2)
本教程完美地解释了它。
http://joris.kluivers.nl/iphone-dev/?p=CurlTransition
基本上,您想要创建一个容器视图,它将是我们将要设置动画的视图,您可以将其命名为containerView。此容器视图已经添加了一个子视图,可以填充整个containerView。如果要为下一个视图设置动画,请使用下面的代码。您删除当前视图并添加下一个视图。最后,您真正在containerView之间进行转换。在动画开始声明之后,它本身正在被改变。
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.5f];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:containerView cache:NO];
[presentView removeFromSuperview];
[containerView addSubview:nextView];
[UIView commitAnimations];
答案 2 :(得分:0)
Wayne我建议你使用标签栏然后实现它的委托方法。我只是为你做了
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
{
//NSArray *vc= tabBarController.viewControllers;
// for (int i = 0; i < [vc count]; i++) {
// UINavigationController *nc = [vc objectAtIndex:i];
// if (nc == tabBarController.selectedViewController) {
// continue;
// }
[UIView beginAnimations:@"animation" context:nil];
//[self.navigationController pushViewController:nc.topViewController animated:NO];
[UIView setAnimationDuration:1.5];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewController.view cache:NO];
[UIView commitAnimations];
return TRUE;
}
这里只是标签栏的逻辑,它只翻转视图而不是tabbar。所以我希望你可以使用ToolBar。 那么它只会给你一个想法。希望它可以帮到你