Создание идеального пикселя стандартного UIBarButtonItem с пользовательским изображением внутри - PullRequest
6 голосов
/ 09 июля 2011

Последние несколько часов я ломал голову над этим.Можно ли создать стандарт UIBarButtonItem с пользовательским изображением внутри ?Все, что я хочу, - это стандартная синяя кнопка, но с изображением, представляющим предпочтения (отвертка или зубчатое колесо, которое я создам сам) внутри.Я бы предпочел не использовать Photoshop для этого, поскольку я хотел бы, чтобы каждый пиксель был идеальным и пригодным для будущего, если Apple выпустит устройства iOS с еще более высоким разрешением.

Я нашел замечательный проект наGitHub, который включает в себя каждый графический элемент, поставляемый с iOS, и я извлек то, что похоже на изображение, которое Apple использует при создании стандарта UIBarButtonItems.Проблема в том, что я не могу изменить его размеры до нужных размеров.Если с кодом невозможно сделать то, что я хочу, возможно, кто-то подскажет, как использовать это изображение.

GitHub - UIKit-Artwork-Extractor

UINavigationBarDefaultButton@2x.png

Спасибо!

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Просто создайте свое изображение в одном цвете (важен только альфа-канал) и используйте initWithImage:style:target:action: со стилем UIBarButtonItemStyleBordered или UIBarButtonItemStyleDone.

Если вы хотите полныйцветное изображение, вам придется использовать изображение, которое вы связали.Секрет в том, чтобы изменить его размер путем дублирования «среднего» столбца и ряда пикселей в стиле изображения 9-патча Android , а не путем масштабирования всего объекта.

1 голос
/ 09 июля 2011

Подобные изображения используются, чтобы их растягивалось .По сути, вы хотите, чтобы при изменении размера изображения растягивалась только середина изображения, а левая и правая крышка не должны масштабироваться, чтобы избежать искажения.

UIImage *buttonImage = [UIImage imageNamed:@"UINavigationBarDefaultButton.png"];
UIImage *stretchableButtonImage = [buttonImage stretchableImageWithLeftCapWidth:5 topCapHeight:0];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundImage:stretchableButtonImage forState:UIControlStateNormal];

Однако в вашем случае не стоитВы просто используете UIBarButtonItem с UIBarButtonItemStyleDone или UIBarButtonItemStyleBordered в качестве стиля?

...