Подтвердить что ты не робот

Растянуть фоновое изображение для UIButton

Я получил текстуру, которая на самом деле короче, чем мой UIButton.

Я получил эту текстуру:

enter image description here

И я должен создать эту кнопку:

enter image description here

Как я должен растягивать (не черепицу), эту текстуру? Растяжение в горизонтальном направлении

Thnx

4b9b3361

Ответ 1

Из приведенных примеров изображений Я уверен, что вы ищете UIImage resizableImageWithCapInsets:

UIImage *originalImage = [UIImage imageNamed:@"myImage.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
UIImage *stretchableImage = [originalImage resizableImageWithCapInsets:insets];
[myButton setBackgroundImage:stretchableImage forState:UIControlStateNormal];
// the image will be stretched to fill the button, if you resize it.

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

enter image description here

Верхнее и нижнее значения могут быть либо 0 (если вы не хотите изменять размер кнопки по вертикали), либо, вероятно, половину общей высоты.

Ответ 2

С помощью Xcode 6 (и iOS7 +) вы можете использовать редактор среза при работе с объектами изображений. Переключить режим нарезки с помощью меню Редактор → Показать slicing или нажать кнопку Показать slicing, когда вы выбираете конкретное изображение с помощью редактора (показано ниже).

Show Slicing button

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

Rules

После этого вы можете выбрать это изображение в Interface Builder для UIButton Фоновое изображение (представление кнопки IB может выглядеть плохо, но при запуске должно быть хорошо).

Мои кнопки выглядят хорошо (работает iOS 7.1 и iOS 8).

enter image description here

Эта ссылка Apple doc

Ответ 3

Не разбивая, я полагаю, вы не можете использовать

- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets

Способ делать то, что вы хотите использовать:

UIGraphicsBeginImageContextWithOptions(newSize, NO, 0); // should be proportionally larger
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, (CGRect){{0,0}, newSize}, [yourImage CGImage]);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;

Ответ 5

Или используя Растягиваемые изображения:

UIImage* imgbkg =[[UIImage imageNamed: @"my_bkg_image.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:10];

[_button setBackgroundImage: imgbkg forState: UIControlStateNormal];

Используйте 0, если вы не хотите растягивать определенную сторону.