动画UITabBarController导航

时间:2013-09-16 17:51:38

标签: ios uitabbarcontroller core-animation

我目前遇到有关动画的iOS开发问题。我正在使用以下代码制作一个“幻灯片动画”,用于在手势识别器触发后切换标签栏项目。

-(void)slideToTab:(int)controllerIndex
{
    if(controllerIndex >= 0 && controllerIndex < [self.tabBarController.viewControllers count])
    {
        // Get the views.
        UIView * fromView = self.tabBarController.selectedViewController.view;
        UIView * toView = [[self.tabBarController.viewControllers objectAtIndex:controllerIndex] view];

        // Get the size of the view area.
        CGRect viewSize = fromView.frame;
        BOOL scrollRight = controllerIndex > self.tabBarController.selectedIndex;

        // Add the to view to the tab bar view.
        [fromView.superview addSubview:toView];

        // Position it off screen.
        toView.frame = CGRectMake((scrollRight ? 320 : -320), viewSize.origin.y, 320, viewSize.size.height);

        [UIView animateWithDuration:0.3
                         animations: ^{

                             // Animate the views on and off the screen. This will appear to slide.
                             fromView.frame =CGRectMake((scrollRight ? -320 : 320), viewSize.origin.y, 320, viewSize.size.height);
                             toView.frame =CGRectMake(0, viewSize.origin.y, 320, viewSize.size.height);
                         }

                         completion:^(BOOL finished) {
                             if(finished)
                             {
                              // Remove the old view from the tabbar view.
                              [fromView removeFromSuperview];
                              self.tabBarController.selectedIndex = controllerIndex;
                             }
                         }];
    }
}

对于选项卡栏上的选项卡栏项,此代码可以正常工作,但每当我点击位于选项卡栏“更多”部分的第一个选项卡时,动画将停止工作,完成块中的完成布尔值将返回假。 是否有理由在标签栏的“更多”部分中发生这种情况,以及可能的解决方案是什么?

1 个答案:

答案 0 :(得分:3)

在iOS 6下,官方不支持实现自定义标签栏转换,但在iOS 7下,您可以使用标签栏的委托工具

-tabBarController:animationControllerForTransitionFromViewController:toViewController:

并返回一个实现

的对象
-transitionDuration and -animateTransition:

将执行转换。