Как работает UIEdgeInsetsMake?
Я делаю приложение, где я использую UIEdgeInsetsMake
за resizableImageWithCapInsets
, но я не понимаю, как это работает точно, UIEdgeInsetsMake
имеет 4 аргумента:
- верхний
- Оставил
- Низ
- Правильно
Но они плавающие, поэтому я не знаю, как установить это изображение, спасибо!:D
3 ответа
Согласно документации:
Этот метод используется для добавления вставок к изображению или для изменения существующих вставок к изображению. В обоих случаях вы получаете новое изображение, а исходное изображение остается нетронутым.
Во время масштабирования или изменения размера изображения области, покрытые крышкой, не масштабируются и не изменяют размер. Вместо этого область пикселей, не покрытая колпачком в каждом направлении, выложена мозаикой, слева направо и сверху вниз, чтобы изменить размер изображения. Этот метод часто используется для создания кнопок переменной ширины, которые сохраняют те же закругленные углы, но центральная область которых увеличивается или уменьшается по мере необходимости. Для лучшей производительности используйте мозаичную область размером 1x1 пикселя.
Таким образом, вам нужно использовать только то количество пикселей, которое вы хотите сделать нерастягиваемым, в значениях UIEdgeInsetsMake
функция.
Скажем, у вас есть изображение размером 21x50 точек (21x50 пикселей в стандартном разрешении, 42x100 пикселей в Retina "@2x") и вы хотите, чтобы это изображение растягивалось по горизонтали, оставляя 10 точек слева и справа нетронутыми при растяжении изображения, но только растяните полосу шириной в 1 пункт в середине. Тогда вы будете использовать UIEdgeInsetsMake(0,10,0,10)
,
Не беспокойтесь, что они являются числами с плавающей точкой (это полезно, например, для изменения размера субпикселей, но на практике вы, вероятно, будете использовать только целые числа (или числа с плавающей запятой без десятичных частей)
Будьте осторожны, это только iOS5+ метод, недоступный до iOS5. Если вы используете SDK до iOS5, используйте stretchableImageWithLeftCapWidth:topCapHeight:
вместо.
[РЕДАКТИРОВАТЬ] Некоторый совет я использую с некоторого времени, так как я никогда не помню, в каком порядке поля 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
}];
Я нахожу это более читабельным, особенно чтобы убедиться, что мы не смешиваем различные границы / направления!
Но они плавают, поэтому я не знаю, как установить это на изображение
Это метод экземпляра UIImage. Итак, как вы используете resizableImageWithCapInsets
создать в изображении означает начать с отправки этого сообщения в изображение (UIImage).
Крутая новая функция: обратите внимание, что если края вставок все равны нулю, изображение будет мозаичным. Это работает как фон для всего, что принимает фоновое изображение. Это даже работает в UIImageView.
Я просто просматриваю эту статью, которая очистила всю мою концепцию относительно UIEdgeInsetsMake
iOS: как сделать растягиваемую кнопку с помощью UIEdgeInsetsMake