it-swarm.com.ru

Как работает UIEdgeInsetsMake?

Я делаю приложение, в котором я использую UIEdgeInsetsMake для resizableImageWithCapInsets, но я не понимаю, как это работает точно, UIEdgeInsetsMake имеет 4 аргумента:

  • Верхний
  • Оставил
  • Низ
  • Правильно

Но они плавающие, поэтому я не знаю, как установить это изображение, спасибо! : D

59
pmerino

Согласно документации:

Этот метод используется для добавления вставок к изображению или для изменения существующих вставок к изображению. В обоих случаях вы получаете новое изображение, а исходное изображение остается нетронутым.

Во время масштабирования или изменения размера изображения области, покрытые крышкой, не масштабируются и не изменяют размер. Вместо этого область пикселей, не покрытая колпачком в каждом направлении, выложена мозаикой, слева направо и сверху вниз, чтобы изменить размер изображения. Этот метод часто используется для создания кнопок переменной ширины, которые сохраняют те же закругленные углы, но центральная область которых увеличивается или уменьшается по мере необходимости. Для лучшей производительности используйте мозаичную область размером 1x1 пикселя.

Таким образом, вам нужно только использовать количество пикселей, которое вы хотите сделать растягиваемым, в значениях функции UIEdgeInsetsMake.

Скажем, у вас есть изображение размером 21x50 точек (21x50 пикселей в стандартном разрешении, 42x100 пикселей в Retina "@ 2x") и вы хотите, чтобы это изображение растягивалось по горизонтали, оставляя 10 точек слева и справа нетронутыми при растяжении изображения , но только растяните полосу шириной в 1 пункт в середине. Тогда вы будете использовать UIEdgeInsetsMake(0,10,0,10).

Не беспокойтесь, что они являются числами с плавающей точкой (это полезно, например, для изменения размера субпикселей, но на практике вы, вероятно, будете использовать только целые числа (или числа с плавающей запятой без десятичных частей)

Будьте осторожны, это только iOS5 + метод, недоступный до iOS5. Если вы используете SDK до iOS5, используйте вместо него stretchableImageWithLeftCapWidth:topCapHeight:.


[EDIT] Некоторый совет я использую уже некоторое время, так как никогда не помню, в каком порядке расположены поля структуры 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
}];

Я нахожу это более читабельным, особенно чтобы убедиться, что мы не смешиваем различные границы/направления!

70
AliSoftware

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

Это метод экземпляра UIImage. Таким образом, способ использования resizableImageWithCapInsets для создания изображения - начать с отправки этого сообщения to изображение (UIImage).

Интересная новая функция: обратите внимание, что если все вставки Edge равны нулю, изображение будет мозаичным. Это работает как фон для всего, что принимает фоновое изображение. Это даже работает в UIImageView.

10
matt

Я просто просматриваю эту статью, которая очистила всю мою концепцию относительно UIEdgeInsetsMake

iOS: как сделать растягиваемую кнопку с помощью UIEdgeInsetsMake

3
Azhar