63 votes

UIBarButtonItem avec UIImage Toujours teinté iOS 7

J'essaye d'ajouter un UIBarButtonItem contenant un UIImage d'un UIToolbar. L'image continue d'être teinté et je n'arrive pas à afficher l'image originale en couleurs - tout ce que je veux faire, c'est afficher une image, mot à mot, en UIBarButtonItem! Je suis en suivant les instructions de l'iOS 7 guide de transition pour définir l'image mode de rendu à l' 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];

Une chose à noter est que j'ai mis la nuance de couleur pour les principaux UIWindow de mon application quand il charge...peut-être que ce n'est pas important en ce qui concerne mon problème, mais pensé que je le mentionne.

173voto

ScorpionKing2k5 Points 721

J'ai passé une soirée à essayer de le comprendre ainsi. Vous étiez très proche de la solution. L'astuce consiste à instancier les UIImage avec le mode de rendu.

Au lieu de faire:

 UIImage *image = [UIImage imageNamed:@"myImage.png"];
 image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

faire cela:

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

et ça marche!!!

Dans mon cas, j'avais glissé une barre de Navigation pour mon viewcontroller de l'IB, et l'ajout de la BarButtonItem. Mais ne pas fournir l'élément d'une image dans l'IB. Faire une prise de courant et attribuez-lui une UIImage (comme nous avons créé ci-dessus) en faisant ceci:

[myCustomBarButtonItem setImage:image];

Espérons que cela fonctionne pour vous.

-4voto

Tim Crowley Points 203

Si vous voulez que cela fonctionne pour les versions d'iOS inférieures à v7, vous devrez peut-être ceci:

 UIImage *image = [UIImage imageNamed:@"myImage.png"];
@try {
  image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
} @catch (NSException *exception) {
}
 

ImageWithRenderingMode: étant une méthode iOS 7, vous obtiendrez une exception si vous essayez de l’utiliser avec une version plus petite.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X