动画制表切换过程

时间:2011-09-13 01:15:25

标签: iphone uitabbar

任何人都可以在切换标签时动画制作流程吗?

我目前正在做2个问题。

1:它弄乱了我的UIControl颜色。 2:首先切换标签,然后执行动画。

我希望在将视图推送到导航堆栈时实现类似效果。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:bookingVC.view cache:YES];
[UIView commitAnimations];
[self.tabBarController setSelectedIndex:0];

现在我正在做这个,它没有任何动画效果。

NSArray *tabBarVC = [self.tabBarController viewControllers];
UINavigationController *firstTabNC = [tabBarVC objectAtIndex:0];
BookingViewController *bookingVC = (BookingViewController *)[[firstTabNC viewControllers] objectAtIndex:0];
[bookingVC setNSStringProperty:newString]; //this string will be displayed on a UITextField whenever viewDidAppear; 

// So, I need some animation here when I switch tabs to make it more obvious that the UITextField is updated.
[self.tabBarController setSelectedIndex:0];

我完全无法创建自己的动画,请指导我。我很开心,想要更好地展示。 感谢。

2 个答案:

答案 0 :(得分:1)

你有什么理由需要使用iOS4之前的动画方式吗?动画块简化了这一点:

[UIView animateWithDuration:1.0
                      delay:0
                    options:UIViewAnimationOptionTransitionCurlUp
                 animations:
 ^{
      // show your desired view however you do it
 }
                 completion:
 ^(BOOL finished) {
      [self.tabBarController setSelectedIndex:0];
 }];

编辑:抱歉,我没有接你,你正在以某种方式进行视图转换..傻。对于这种情况,还有另一种基于块的方法:

[UIView transitionWithView:bookingVC.view
                  duration:1.0
                   options:UIViewAnimationOptionsTransitionCurlUp
                animations:
 ^{
     // do view transitioning here
 }
                completion:
 ^(BOOL finished) {
     [self.tabBarController setSelectedIndex:0];
 }];

编辑2:好吧,所以你似乎需要一些帮助来解决所有这些问题。您应该对UITabBarControllerDelegate协议(您的自定义类将实现的协议)中的活动选项卡进行动画更改。特别是tabBarController:didSelectViewController:方法。

我建议您首先覆盖tabBarController:shouldSelectViewController:方法,以确保不会意外地为从标签到相同标签的转换设置动画:

- (BOOL)tabBarController:(UITabBarController *)tabBarController
  shouldSelectViewController:(UIViewController *)viewController
{
    return viewController != [tabBarController selectedViewController];
}

didSelectViewController:中,执行动画。我也将借此机会修改您的代码,因为如果您在此方法中执行此操作,则会自动处理标签栏控制器的selectedIndex,以及您使用{{1}执行的任何操作可以由活动选项卡控制器和新(选定)控制器之间的直接转换替换:

bookingVC.view

请注意,我使用- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { [UIView transitionFromView:[tabBarController selectedViewController].view toView:viewController.view duration:1.0 options:UIViewAnimationOptionsTransitionCurlUp | UIViewAnimationOptionsShowHideTransitionViews completion:nil]; } 作为动画选项的一部分。我这样做是因为我们的动画已经在系统的顶部已经更改了活动标签,所以我们不想通过尝试在系统同时从视图层中删除视图来解决它。 / p>

答案 1 :(得分:0)

尝试将动画序列放在didSelectItem:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

然后设置一个modalView控制器并从那里设置页面卷曲效果的动画。