Согласно документации:
Этот метод используется для добавления вставок к изображению или для изменения существующих вставок к изображению. В обоих случаях вы получаете новое изображение, а исходное изображение остается нетронутым.
Во время масштабирования или изменения размера изображения области, покрытые крышкой, не масштабируются и не изменяют размер. Вместо этого область пикселей, не покрытая колпачком в каждом направлении, выложена мозаикой, слева направо и сверху вниз, чтобы изменить размер изображения. Этот метод часто используется для создания кнопок переменной ширины, которые сохраняют те же закругленные углы, но центральная область которых увеличивается или уменьшается по мере необходимости. Для лучшей производительности используйте мозаичную область размером 1x1 пикселя.
Таким образом, вам нужно использовать только количество пикселей, которое вы хотите сделать нерастягиваемым, в значениях функции UIEdgeInsetsMake
.
Скажем, у вас есть изображение 21x50 точек (21x50 пикселей в стандартном разрешении, 42x100 пикселей в сетчатке с разрешением "2x") и вы хотите, чтобы это изображение растягивалось по горизонтали, оставляя 10 точек слева и справа нетронутыми, когда растянуть изображение, но растянуть только полосу шириной в 1 пункт в середине. Тогда вы будете использовать UIEdgeInsetsMake(0,10,0,10)
.
Не беспокойтесь, что они являются числами с плавающей точкой (это полезно, например, для изменения размера субпикселов, но на практике вы, вероятно, будете использовать только целые числа (или числа с плавающей запятой без десятичных частей)
Будьте осторожны, это метод iOS5 +, недоступный до iOS5. Если вы используете SDK до iOS5, используйте stretchableImageWithLeftCapWidth:topCapHeight:
.
[РЕДАКТИРОВАТЬ] Какой-то совет Я использую с некоторого времени, так как никогда не помню, в каком порядке расположены поля структуры UIEdgeInsets
- и в каком порядке мы должны передавать аргументы UIEdgeInsetsMake
функция - я предпочитаю использовать синтаксис "обозначенных единиц" , например:
UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };
Или когда требуется явное приведение:
UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
.left = 50, .right = 50,
.top = 10, .bottom = 10
}];
Я нахожу это более читабельным, особенно чтобы убедиться, что мы не смешиваем различные границы / направления!