iPhone - Анимация TabBarController Переключатели - PullRequest
1 голос
/ 04 марта 2010

Я переключаю вкладки через код следующим образом:

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

Переключение между вкладками работает нормально.Мне интересно, есть ли способ оживить переход.Это должно быть только в этом случае, а не всего tabbarcontroller в целом.То есть переход будет происходить только тогда, когда вкладка переключается через этот конкретный фрагмент кода.Это должно происходить мгновенно (без анимации) при нажатии на фактический элемент вкладки.

Если кто-то может помочь, помощь очень ценится.

1 Ответ

1 голос
/ 04 марта 2010

Если у вас нет ничего сложного в работе с контроллером панели вкладок, вы можете свернуть свой собственный из UITabBar, а затем вы можете делать все, что захотите, когда переключаете вкладки. Вы просто реализуете UITabBarDelegate. Вот пример кода, немного измененного по сравнению с тем, что я использую в приложении:

.h файл:

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

.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;
    }
}

Внутри didSelectItem вы можете делать любую анимацию, какую захотите. Я просто делаю немедленную замену альфы, но вы можете быть настолько сложным, насколько захотите.

...