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