Растянуть фоновое изображение для UIButton
Я получил текстуру, которая на самом деле короче, чем мой UIButton.
Я получил эту текстуру:
![enter image description here]()
И я должен создать эту кнопку:
![enter image description here]()
Как я должен растягивать (не черепицу), эту текстуру? Растяжение в горизонтальном направлении
Thnx
Ответы
Ответ 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;
Ответ 4
Использовать метод stretchableImageWithLeftCapWidth:topCapHeight:
.
Обратитесь: https://github.com/boctor/idev-recipes/tree/master/StretchableImages
Ответ 5
Или используя Растягиваемые изображения:
UIImage* imgbkg =[[UIImage imageNamed: @"my_bkg_image.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:10];
[_button setBackgroundImage: imgbkg forState: UIControlStateNormal];
Используйте 0, если вы не хотите растягивать определенную сторону.