2010-03-04 9 views
0

Je onglets de commutation par code avec ceci:iPhone - Animer TabBarController Commutateurs

self.tabBarController.selectedIndex = 1; // or any other number 

La commutation entre les onglets fonctionne très bien. Je me demande s'il y a un moyen d'animer la transition. Ce ne devrait être que dans ce cas, pas le total tabbarcontroller en général. C'est-à-dire que la transition n'aura lieu que lorsque l'onglet est passé par ce morceau de code spécifique. Il devrait être instantané (sans animation) lorsque l'on clique sur l'élément réel de l'onglet.

Si quelqu'un peut vous aider, l'aide est très appréciée.

Répondre

1

Si vous n'avez rien de compliqué avec le contrôleur de barre d'onglets, vous pouvez rouler le vôtre à partir d'un UITabBar et vous pouvez faire tout ce que vous voulez quand vous changez d'onglet. Vous venez d'implémenter le UITabBarDelegate. Voici un exemple de code légèrement modifié de ce que j'utilise dans une application:

.h:

@interface AllGames : UIViewController <UITabBarDelegate> { 
    IBOutlet UITabBar *tabBar; 
} 
@property (nonatomic, retain) IBOutlet UITabBar *tabBar; 

fichier .m:

@implementation AllGames 

@synthesize tabBar; 

UIViewController *subviews[3]; 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    int startTab = [Preferences LookupPreferenceInt:CFSTR("GameTab")]; 
    [tabBar setSelectedItem:[tabBar.items objectAtIndex:startTab]]; 

    Games1 *vc1 = [[Games1 alloc] initWithNibName:@"Games1" bundle:nil]; 
    Games2 *vc2 = [[Games2 alloc] initWithNibName:@"Games2" bundle:nil]; 
    Games3 *vc3 = [[Games3 alloc] initWithNibName:@"Games3" bundle:nil]; 

    subviews[0] = vc1; 
    subviews[1] = vc2; 
    subviews[2] = vc3; 
    vc1.view.alpha = 0; 
    vc2.view.alpha = 0; 
    vc3.view.alpha = 0; 
    [self.view addSubview:vc1.view]; 
    [self.view addSubview:vc2.view]; 
    [self.view addSubview:vc3.view]; 
    subviews[startTab].view.alpha = 1.0; 
} 

- (void)dealloc { 
    [Preferences StorePreferenceInt:CFSTR("GameTab") withValue:[tabBar selectedItem].tag-1]; 
    for (int x = 0; x < 3; x++) 
    { 
     [subviews[x].view removeFromSuperview]; 
     [subviews[x] release]; 
     subviews[x] = 0; 
    } 
    [super dealloc]; 
} 

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { 
    printf("Hit item tag: %d\n", item.tag); 
    for (int x = 1; x <= 3; x++) 
    { 
     subviews[x-1].view.alpha = (x == item.tag)?1.0:0.0; 
    } 
} 

intérieur didSelectItem vous pouvez faire une animation vous vouloir. Je fais juste un échange immédiat de l'alpha, mais vous pouvez être aussi compliqué que vous le souhaitez.

+0

Avez-vous des exemples? Ça m'aiderait à avoir une idée de ce qu'il faut faire. – intl

+0

Edité le code ci-dessus avec un exemple détaillé. –

Questions connexes