有没有一种方法可以在不使整个屏幕动画的情况下使用UIViewAnimationOptionTransitionCurlUp?

7

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

UIViewController
|
|-view
    |-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个回答

3

我一直在为这个问题苦苦挣扎,唯一能解决它的方法就是将fromView放入另一个视图中。在您的情况下,视图层次结构应该如下所示:

UIViewController
|
|-view
   |-containerView
      |-presentView
   |-stagedView
   |-UIToolBar

fromView参数仍然应指向presentView。希望这可以帮助你。


2
这篇教程讲得非常清楚明白。基本上,您需要创建一个容器视图(containerView),这将是我们要动画化的视图,您可以称之为containerView。该容器视图将已经添加一个子视图,该子视图可以填充整个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];

谢谢!这正是我所需要的。 - titaniumdecoy

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;

    }

这里只是关于选项卡栏的逻辑,它只翻转视图而不是选项卡栏。所以我希望你能用同样的方法处理工具栏。 好吧,这只是给你一个想法。希望能对你有所帮助。


好的,除了UITabBarController不适合这个应用程序之外,其他都可以。我所做的设计选择非常适合我正在编写的应用程序。TabBarControllers用于在不同的视图控制器之间切换。我希望交换的视图是互补的。工具栏不是用于在各种视图之间切换,而是用于与它们进行交互,因此UITabBarController不合适。谢谢。 - Wayne Hartman
@Wayne,没问题,亲爱的,我以为你想要同样的方式。好的,你可以试一试并玩弄你的代码... 你只需要提供想要转换的视图 forview [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:viewController.view cache:NO],就可以实现过渡效果了。 - Sabby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接