Personalizar UITabBarItem

Sé que es posible personalizar UITabBarItem en iOS 5 usando

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

La imagen tabbar_sel tiene un ancho de 120 px (640 px/5). Para el modo horizontal, necesito cambiar esto a una imagen con un ancho de 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"]];
    }
}

Sin embargo, esto no funciona, ya sea en la clase de delegado o en ViewController. También ya probé esto, pero conduce a un bloqueo.

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

preguntado el 31 de julio de 12 a las 11:07

1 Respuestas

willRotateToInterfaceOrientation: se llamará cuando la vista se esté cargando para verificar a qué orientaciones debe girar automáticamente, sin embargo, no pregunta esto cada vez que intenta girar. Puedes observar cuando la orientación cambia así:

[[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");
  }
}

Respondido 31 Jul 12, 14:07

Lo verifiqué y edité mi código, esto debería funcionar para indicar cambios al pasar de vertical a horizontal y viceversa. Sin embargo, no estoy afirmando que, combinado con el código proporcionado, dará el efecto requerido. No estoy seguro de que al usar setSelectionIndicatorImage: también se vuelva a pintar automáticamente. - pieter gunst

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.