objective c - UIBarButtonItem con UIImage Always Tinted iOS 7
objective-c ios7 (4)
Estoy tratando de agregar un UIBarButtonItem
contiene un UIImage
a una UIToolbar
. La imagen se tiñe y no puedo mostrarla como la imagen coloreada original; todo lo que quiero hacer es mostrar una imagen, palabra por palabra, en un UIBarButtonItem
. Estoy siguiendo las instrucciones de la guía de transición de iOS 7 para configurar el modo de renderización de imágenes en UIImageRenderingModeAlwaysOriginal
.
UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil];
[toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES];
Una cosa a tener en cuenta es que configuro el tintColor para la ventana UI principal de mi aplicación cuando se carga ... tal vez esto no es importante con respecto a mi problema, pero pensé que lo mencionaría.
Para Swift 2.1+ se vería así:
let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
ACTUALIZADO Swift 3
let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
Pasé una tarde tratando de resolver esto también. Estabas muy cerca de la solución. El truco es crear una instancia del UIImage con el modo de renderizado.
En lugar de hacer:
UIImage *image = [UIImage imageNamed:@"myImage.png"];
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
hacer esto:
UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
¡y funciona!
En mi caso, arrastré una barra de navegación hacia mi controlador de visualización en el IB y agregué el BarButtonItem. Pero no le proporcione al artículo una imagen en el IB. Haga una salida y asígnele el UIImage (como creamos arriba) haciendo esto:
[myCustomBarButtonItem setImage:image];
Espero que esto funcione para usted.
Si desea que funcione para versiones de iOS inferiores a v7, es posible que deba hacer esto:
UIImage *image = [UIImage imageNamed:@"myImage.png"];
@try {
image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} @catch (NSException *exception) {
}
Como imageWithRenderingMode: es un método de iOS 7, obtendrá una excepción si lo intenta y lo usa con una versión menor.
UIImageRenderingModeAlwaysOriginal también se puede configurar seleccionando la imagen en su "carpeta" Assets.xcassets en XCode y configurando el menú desplegable "Render como" en "Imagen original".