Как работает UIEdgeInsetsMake? - PullRequest
       35

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

59 голосов
/ 02 октября 2011

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

  • Top
  • левый
  • Bottom
  • правый

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

Ответы [ 3 ]

70 голосов
/ 02 октября 2011

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

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

Во время масштабирования или изменения размера изображения области, покрытые крышкой, не масштабируются и не изменяют размер. Вместо этого область пикселей, не покрытая колпачком в каждом направлении, выложена мозаикой, слева направо и сверху вниз, чтобы изменить размер изображения. Этот метод часто используется для создания кнопок переменной ширины, которые сохраняют те же закругленные углы, но центральная область которых увеличивается или уменьшается по мере необходимости. Для лучшей производительности используйте мозаичную область размером 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
}];

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

10 голосов
/ 02 ноября 2011

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

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

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

3 голосов
/ 04 марта 2014

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

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

...