Как использовать изображение в качестве фона кнопки?

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

введите здесь описание изображения

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

Вот два метода, которые я пробовал:

  UIButton *emailSupportButton = [[UIButton alloc] initWithFrame:CGRectMake(25, 315, 200, 60)];
  [emailSupportButton setTitle:@"Email Support" forState:UIControlStateNormal];
  [emailSupportButton setImage:[UIImage imageNamed:@"toolbar-button"] forState:UIControlStateNormal];

Этот метод приводит к тому, что изображение кнопки не растягивается и отображается точно так, как обычно отображается .png.

Другой метод, который я пробовал, - это установка фонового изображения, например...

  UIButton *emailSupportButton = [[UIButton alloc] initWithFrame:CGRectMake(25, 315, 200, 60)];
  [emailSupportButton setTitle:@"Email Support" forState:UIControlStateNormal];
  [emailSupportButton setBackgroundImage:[UIImage imageNamed:@"toolbar-button"] forState:UIControlStateNormal];

Этот метод очень уродливо растягивает изображение вместо достижения желаемого эффекта, в результате чего кнопка становится почти эллиптической с очень уродливой рамкой.

Проблема в том, что я использую неправильный метод создания пользовательской кнопки или мое изображение не подходит для задачи, которую я пытаюсь выполнить? Должно ли мое изображение быть прямоугольным и не включать границу кнопки, позволяя UIButton позаботиться о границе/округлении для меня? Должно ли мое изображение уже быть размером с кнопку (это кажется немного ограничивающим)?


person MikeS    schedule 18.10.2012    source источник


Ответы (1)


Второй метод, который вы указали (по коду), - это то, что вам нужно. Чего вам не хватает, так это растягиваемого изображения. Попробуй это:

UIButton *emailSupportButton = [[UIButton alloc] initWithFrame:CGRectMake(25, 315, 200, 60)];
[emailSupportButton setTitle:@"Email Support" forState:UIControlStateNormal];
UIImage *backgroundImage = [UIImage imageNamed:@"toolbar-button"];
CGSize size = backgroundImage.size;
backgroundImage = [backgroundImage stretchableImageWithLeftCapWidth:size.width/2.0 topCapWidth:size.height/2.0];
[emailSupportButton setBackgroundImage:backgroundImage forState:UIControlStateNormal];

Если вы выполняете развертывание только на iOS 5 и более поздних версиях, вам следует использовать новые -[UIImage resizableImageWithCapInsets:(UIEdgeInsets)capInsets]; iOS 6, которые также добавляют -[UIImage resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingMode];

person gschandler    schedule 18.10.2012
comment
Вау круто, спасибо! Это было именно то, что я искал. - person MikeS; 18.10.2012