iPhone UIBarButtonItem альфа кнопки изображения - PullRequest
1 голос
/ 01 декабря 2010

Я добавил кнопку на нижнюю панель инструментов следующим образом:

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];

Это прекрасно работает, альфа изображения отлично подобрана, кнопка отображается следующим образом:

Location Icon

Итак, я взял этот код и немного изменил его, чтобы создать кнопку на моей навигационной панели:

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];

Кажется, что альфа на этом не подобрана- он выглядит серым:

alt text

Есть ли что-то, что мне нужно установить при использовании пользовательских изображений в панели навигации?

Спасибо и С уважением,

Rich

1 Ответ

2 голосов
/ 01 декабря 2010

Вы можете преобразовать изображение в белое с помощью нескольких строк кода:

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);
...