2010-12-01 50 views
1

J'ai ajouté un bouton à une barre d'outils inférieure comme ceci:iPhone UIBarButtonItem alpha de l'image bouton

UIImage *locationImage = [UIImage imageNamed:@"193-location-arrow.png"]; 
UIBarButtonItem *locationButton = [[UIBarButtonItem alloc] initWithImage:locationImage style:UIBarButtonItemStyleBordered target:self action:@selector(updateCurrentLocation)]; 

NSArray *items = [[NSArray alloc] initWithObjects:locationButton,nil]; 
[toolbar setItems:items]; 
[items release]; 
[locationButton release]; 

Cela fonctionne très bien, l'alpha de l'image est pris fin, le bouton affiche comme ceci:

Location Icon

Alors, je pris ce code et légèrement modifié pour créer un bouton dans ma barre de navigation:

UIImage *favouriteImage = [UIImage imageNamed:@"28-star.png"]; 

UIBarButtonItem *favouriteButton = [[UIBarButtonItem alloc] initWithImage:favouriteImage style:UIBarButtonItemStyleBordered target:self action:nil]; 

self.navigationItem.rightBarButtonItem = favouriteButton; 

[favouriteButton release]; 

L'alpha ne semble pas être repris sur celui-ci - il semble grisés:

alt text

Y at-il quelque chose que je dois mettre lors de l'utilisation des images personnalisées dans la barre de navigation?

Merci et salutations,

Rich

Répondre

2

Vous pouvez convertir l'image en blanc avec quelques lignes de code:

CGRect imageRect = CGRectMake(0, 0, inImage.size.width, inImage.size.height) 
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 

CGContextRef context = CGBitmapContextCreate(data1, imageRect.size.width, imageRect.size.height, 8, imageRect.size.width * 4, colorSpace, kCGImageAlphaPremultipliedLast); 
CGContextClipToMask(context, imageRect, inImage.CGImage); 
CGContextSetRGBFillColor(context1, 1, 1, 1, 1); 
CGContextFillRect(context, imageRect); 

CGImageRef finalImage = CGBitmapContextCreateImage(context); 
UIImage *returnImage = [UIImage imageWithCGImage:finalImage];  

CGContextRelease(context); 
CGColorSpaceRelease(colorSpace); 
CGImageRelease(finalImage); 
+0

Merci pour cela. Cependant, j'aimerais savoir pourquoi les deux agissent différemment cependant? Juste pour l'amour de ma propre curiosité! Des idées? – Rich

+1

UIBarButtonItem n'est pas techniquement une sous-classe de UIView, c'est juste une structure de données - la présentation réelle de UIBarButtonItems est à la barre d'outils/autre vue qui les affiche.Pas sûr à 100% pourquoi Apple a choisi d'appliquer ce filtre blanc-ifying dans les boutons UIToolbars mais pas UINavigationBars, mais j'ai vu le même problème ici, donc vous ne l'imaginez pas. – Ertebolle