有没有办法使用UIViewAnimationOptionTransitionCurlUp而不用它动画整个屏幕?

时间:2011-01-14 03:41:22

标签: iphone uiviewanimation uiviewanimationtransition

我有一个具有以下层次结构的视图控制器:

的UIViewController
|
| - 视图
| -presentView(UIView)
| -stagedView(UIView)
| -UIToolbar

我正在使用transitionFromView:toView:duration:options:completion:方法为页面卷曲设置动画,以便在presentViewstagedView之间进行切换。当前和分段视图仅涵盖屏幕的 大多数 ,底部有一个UIToolbar。当我使用UIViewAnimationOptionTransitionCurlUp转换时,它会为整个根视图(包括工具栏)设置动画,而不仅仅是所涉及的两个视图。

[UIView transitionFromView:self.presentView
                    toView:self.stagedView 
                  duration:0.5f 
                   options:UIViewAnimationOptionTransitionCurlUp
                completion:^ (BOOL finished) {
                                   if (finished) {
                                      // cleanup code
                                   }}];

有没有办法只为两个子视图设置动画,只留下工具栏?如果是这样,怎么样?

3 个答案:

答案 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。 那么它只会给你一个想法。希望它可以帮到你