web-dev-qa-db-fra.com

UIBarButtonItem avec UIImage Toujours teinté iOS 7

J'essaie d'ajouter une UIBarButtonItem contenant une UIImage à une UIToolbar. L'image continue à être teintée et je ne parviens pas à la montrer sous la forme d'une image colorée d'origine. Tout ce que je veux faire, c'est afficher une image, telle quelle, dans une UIBarButtonItem! Je suis les instructions du guide de transition iOS 7 pour définir le mode de rendu d'image sur 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 je règle la teinteCouleur pour la principale UIWindow de mon application lorsqu'elle se charge ... peut-être que ce n'est pas important en ce qui concerne mon problème, mais je pensais le mentionner.

62
DiscDev

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

Au lieu de faire:

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

faire ceci:

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

et il fonctionne!

Dans mon cas, j'avais fait glisser une barre de navigation sur mon contrôleur de vue dans l'IB et ajouté le paramètre BarButtonItem. Mais ne fournissez pas à l'image une image dans l'IB. Créez un point de vente et attribuez-lui le UIImage (comme nous l'avons créé ci-dessus) en procédant comme suit:

[myCustomBarButtonItem setImage:image];

J'espère que cela fonctionne pour toi.

171
ScorpionKing2k5

UIImageRenderingModeAlwaysOriginal peut également être défini en sélectionnant l'image dans votre "dossier" Assets.xcassets dans XCode et en définissant le menu déroulant "Rendre comme" sur "Image d'origine".

10
andlin

Pour Swift 2.1+, cela ressemblerait à ceci:

let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)

MISE À JOUR Swift 3

let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
9
jesses.co.tt

La réponse acceptée convient, mais si vous avez placé la UIBarButtonItem dans un storyboard ou xib, vous pouvez simplement:

  • Accédez au catalogue Actifs où réside l'image
  • Sélectionnez l'image
  • Aller à l'inspecteur d'attributs (cmd-opt-4)
  • Définissez "Render As" sur "Image originale"

Faites cela uniquement si vous voulez que toutes instances de cette image apparaissent sans teinter.

 enter image description here

0
John Scalo