2010-04-25 5 views
3

Я ищу, чтобы создать пользовательский UIButton (не подкласс) progrmatically, я бы хотел, чтобы у него было фоновое изображение, которое будет растягиваться по мере увеличения ширины UIButton. Как мне это сделать?Создание пользовательского UIButton

ответ

15

Сначала создайте растяжению UIImage (это предполагает «шапку» в конце вашей кнопки изображения 10px):

UIImage *backgroundImage = [[UIImage imageNamed:@"ImageBackground.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:0]; 

Затем используйте растяжение изображения в качестве фона:

[myButton setBackgroundImage:backgroundImage forState:UIControlStateNormal]; 

Когда вы устанавливаете backgroundImage на UIButton для UIControlStateNormal, он действует как фон для . Все заявляет, если вы явно не задали другой backgroundImage для любого другого состояния.

+0

Я вижу, как это работает, но по какой-то причине код, который я использую (http://gist.github.com/378341), ничего не добавляет к представлению. Мой файл redButton.png находится в моих ресурсах. – Joshua

+0

Проверьте (используя отладчик или используя 'NSLog'), что ваш' backgroundImage' не равен нулю. Если '+ [UIImage imageNamed:]' не может найти ваше изображение, оно вернет нуль. –

+1

Minor nit: '-stretchableImage ...' принимает 2 целых числа в качестве входных, а не плавающих точек. – kennytm

-5

Вы должны установить UIImage, созданный с помощью кнопки «stretchableImageWithLeftCapWidth:topCapHeight:» в качестве кнопки. Например:

UIImage *yourBackgroundImage = [[UIImage imageNamed:@"yourImage.png"] stretchableImageWithLeftCapWidth:1 topCapHeight:1]; 
yourButton.backgroundColor = [UIColor colorWithPatternImage:yourBackgroundImage]; 
+0

Неверный: + colorWithPatternImage всегда плитка – tofi9

1

Еще лучше, используйте свойство UIView contentStretch. В противном случае вы можете получить некоторые неприятные сюрпризы, если вы используете stretchableImageWithLeftCapWidth для сжатия графики или растяжения сложной графики с эффектами освещения или блеска.

0

Ну, свойство UIView contentStretch будет правильным решением, но, к сожалению, оно не работает с базовым свойством UIButton (по крайней мере, XCode 4.0.2). Он даже выставлен в IB, поэтому вам не нужен какой-либо код для него.

Смежные вопросы