Настройте 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");
}
}