Что такое свойство «Mode» в Interface Builder, которое предлагает «Scale to fill», «Aspect fit» и т. Д.? - PullRequest
39 голосов
/ 26 января 2011

Мне интересно, что такое выпадающий "Режим"? Он содержит «Масштаб для заполнения», «Аспектная подгонка» и так далее. Мне никогда не приходилось менять это до сих пор, но мне все же интересно, для чего это можно использовать. Может кто-нибудь объяснить?

Ответы [ 3 ]

56 голосов
/ 22 августа 2015

Свойство режима содержимого представления указывает, как его содержимое должно быть размечено.В Интерфейсном Разработчике различные режимы могут быть выбраны в Инспекторе Атрибутов.

enter image description here

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

enter image description here

Масштабирование до заполнения

enter image description here

Высота и ширина изображения растянуты в соответствии с размером UIImageView.

Соотношение сторон

enter image description here

Самая длинная сторона (высота или ширина) изображения растягивается в соответствии с видом.Это делает изображение максимально большим, при этом показывая все изображение целиком и не искажая высоту или ширину.(Я установил фон UIImageView на синий, чтобы его размер был четким.)

Заполнение аспекта

enter image description here

Самая короткая сторона(высота или ширина) изображения растягивается, чтобы соответствовать виду.Как и в «Aspect Fit», пропорции изображения не искажаются от их исходного соотношения сторон.

Перерисовать

enter image description here

Перерисоватьтолько для пользовательских представлений, которые должны выполнять собственное масштабирование и изменение размера.Мы не используем пользовательское представление, поэтому не следует использовать Redraw.Обратите внимание, что здесь UIImageView просто дает нам тот же результат, что и Scale to Fill, но он делает больше закулисной работы.

О перерисовке, в документации говорится:

Режимы содержимого хороши для повторного использования содержимого вашего представления, но вы также можете установить режим содержимого на значение UIViewContentModeRedraw, если вы хотите, чтобы ваши собственные представления перерисовывались во время масштабирования иизменение размера операций.Установка этого значения в режиме содержимого вашего вида заставляет систему вызывать метод drawRect: вашего представления в ответ на изменения геометрии.В общем, вам следует избегать использования этого значения везде, где это возможно, и вам определенно не следует использовать его со стандартными системными представлениями.

Центр

enter image description here

Изображение центрируется на виде, но длина и ширина изображения не растягиваются.

Верх

enter image description here

Верхний край изображения центрируется по горизонтали в верхней части вида, а длина и ширинаизображение не растягивается.

Снизу

enter image description here

Нижний край изображения центрируется по горизонтали в нижней части вида, а длина и ширинаизображение не растягивается.

Слева

enter image description here

Левый край изображения отцентрирован по вертикали слева от вида, а длина и ширинаизображение не растягивается.

Справа

enter image description here

Правый край изображения отцентрирован по вертикали справа от вида, а длина и ширинаизображение не растягивается.

Вверху слева

enter image description here

Верхний левый угол изображения размещается в верхнем левом углу представления.Длина и ширина изображения не растягиваются.

Вверху справа

enter image description here

Верхний правый угол изображения размещается по адресуверхний правый угол зрения.Длина и ширина изображения не растягиваются.

Внизу слева

enter image description here

Нижний левый угол изображения размещен по адресунижний левый угол обзора.Длина и ширина изображения не растягиваются.

Внизу справа

enter image description here

Нижний правый угол изображения размещен по адресунижний правый угол обзора.Длина и ширина изображения не растягиваются.

Примечания

  • Если содержимое (в нашем случае изображение) имеет тот же размер, что и представление (в нашемв случае UIImageView), то изменение режима контента не будет иметь никакого значения.

  • См. этот и этот вопрос для обсуждения режимов содержимого для представлений, отличных от UIImageView.

  • В Swift, чтобы установить программный режим содержимого, вы делаете следующее:

    imageView.contentMode = UIViewContentMode.ScaleToFill
    imageView.contentMode = UIViewContentMode.ScaleAspectFit
    imageView.contentMode = UIViewContentMode.ScaleAspectFill
    imageView.contentMode = UIViewContentMode.Redraw
    imageView.contentMode = UIViewContentMode.Center
    imageView.contentMode = UIViewContentMode.Top
    imageView.contentMode = UIViewContentMode.Bottom
    imageView.contentMode = UIViewContentMode.Left
    imageView.contentMode = UIViewContentMode.Right
    imageView.contentMode = UIViewContentMode.TopLeft
    imageView.contentMode = UIViewContentMode.TopRight
    imageView.contentMode = UIViewContentMode.BottomLeft
    imageView.contentMode = UIViewContentMode.BottomRight
    
26 голосов
/ 16 сентября 2011

Просмотр руководства по программированию подробно описывает, о чем вы спрашиваете.Если вы прокрутите вниз до раздела " Режимы содержимого ", вы найдете то, что ищете.

По данным Apple:

"У каждого представления есть режим содержимого, который контролирует, как представление перерабатывает свое содержимое в ответ на изменения в геометрии представления [...] значенияв свойстве contentMode определяет, нужно ли масштабировать растровое изображение для соответствия новым границам или просто прикрепить к одному углу или краю представления. "

5 голосов
/ 28 января 2011

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

должны дать вам базовые идеи

...