Настройте UITabBarItem

Я знаю, что можно настроить UITabBarItem в iOS 5, используя

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_sel"]];

Изображение tabbar_sel имеет ширину 120px (640px/5). Для ландшафтного режима мне нужно изменить это на изображение с шириной 190x.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if(toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    NSLog(@"landscape.");
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_sel_l"]];
    } else {
    NSLog(@"normal.");
    [[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_sel"]];
    }
}

Однако это не работает, либо в классе делегата, либо в ViewController. Я тоже уже пробовал это, но это приводит к сбою.

[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_sel"] 
forBarMetrics:UIBarMetricsDefault];
[[UITabBar appearance] setSelectionIndicatorImage:[UIImage imageNamed:@"tabbar_sel_l"] forBarMetrics:UIBarMetricsLandscapePhone];

1 ответ

Решение

willRotateToInterfaceOrientation: вызывается при загрузке представления для проверки того, в какие ориентации он должен автоматически поворачиваться, однако он не запрашивает это каждый раз при попытке поворота. Вы можете наблюдать, когда ориентация меняется так:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChange:) name:UIDeviceOrientationDidChangeNotification object:nil];

- (void) orientationChange: (NSNotification *) notification {
  UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
  if (orientation == UIDeviceOrientationPortrait) {
     NSLog(@"portrait");
  }else if(orientation == UIDeviceOrientationLandscapeLeft || orientation == UIDeviceOrientationLandscapeRight){
     NSLog(@"landscape");
  }
}
Другие вопросы по тегам