Подтвердить что ты не робот

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

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

  • Top
  • Left
  • Снизу
  • Right

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

4b9b3361

Ответ 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
}];

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

Ответ 2

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

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

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