Мне интересно, о чем идет раскрывающийся "Режим"? Он содержит "Масштаб для заполнения", "Аспект подходит" и т.д. Мне никогда не приходилось менять его до сих пор, тем не менее мне любопытно, для чего его можно использовать. Может кто-нибудь объяснить?
Что такое свойство "Режим" в Interface Builder, которое предлагает "Масштаб для заполнения", "Аспект подходит" и т.д.?
Ответ 1
Просмотр руководства по программированию подробно рассказывает о том, о чем вы спрашиваете. Если вы перейдете к разделу " Режимы контента", вы найдете то, что ищете.
В основном в соответствии с Apple:
"Каждый вид имеет режим содержимого, который управляет тем, как представление перерабатывает его содержимое в ответ на изменения геометрии представлений [...] значение в свойстве contentMode определяет, следует ли масштабировать растровое изображение, чтобы оно соответствовало новым границам или просто привязаны к одному углу или к краю зрения".
Ответ 2
свойство режима содержимого представления сообщает, как его содержимое должно быть выложено. В Interface Builder в Инспекторе атрибутов могут быть выбраны различные режимы.
Позвольте использовать два изображения, чтобы увидеть, как работают различные режимы.
Масштаб для заполнения
Высота и ширина изображения растягиваются в соответствии с размером UIImageView
.
Аспект Fit
Самая длинная сторона (высота или ширина) изображения растягивается в соответствии с представлением. Это делает изображение настолько большим, насколько возможно, пока оно покажет все изображение, а не искажает высоту или ширину. (Я установил фон UIImageView
на синий, чтобы его размер был ясным.)
Аспект заполнения
Самая короткая сторона (высота или ширина) изображения растягивается в соответствии с представлением. Как и "Aspect Fit", пропорции изображения не искажаются от их исходного соотношения сторон.
Redraw
Перерисовать только для пользовательских представлений, которым необходимо выполнить собственное масштабирование и изменение размера. Мы не используем пользовательский вид, поэтому нам не следует использовать Redraw. Обратите внимание, что здесь UIImageView
просто дает нам тот же результат, что и Scale to Fill, но он делает больше работы за кулисами.
О Redraw, documentation говорит:
Режимы содержимого хороши для повторного использования содержимого вашего представления, но вы также можете установить режим содержимого в значение
UIViewContentModeRedraw
, когда вы в частности, хотите, чтобы ваши пользовательские представления перерисовывались во время операций масштабирования и изменения размера. При настройке режима просмотра ваших представлений это значение заставляет систему вызывать ваши представленияdrawRect:
в ответ на изменения геометрии. В общем, вам следует избегать использования этого значения, когда это возможно, и вы, конечно же, не должны использовать его со стандартными представлениями системы.
Центр
Изображение сосредоточено в представлении, но длина и ширина изображения не растянуты.
Top
Верхний край изображения центрируется по горизонтали в верхней части изображения, а длина и ширина изображения не растянуты.
Снизу
Нижний край изображения центрируется по горизонтали в нижней части изображения, а длина и ширина изображения не растянуты.
Left
Левый край изображения центрируется по вертикали слева от представления, а длина и ширина изображения не растянуты.
Right
Правый край изображения центрируется по вертикали справа от представления, а длина и ширина изображения не растянуты.
Верхний левый
Верхний левый угол изображения расположен в верхнем левом углу окна. Длина и ширина изображения не растянуты.
Вверху справа
Верхний правый угол изображения расположен в верхнем правом углу окна. Длина и ширина изображения не растянуты.
Внизу слева
Нижний левый угол изображения расположен в левом нижнем углу окна. Длина и ширина изображения не растянуты.
Внизу справа
Нижний правый угол изображения расположен в правом нижнем углу окна. Длина и ширина изображения не растянуты.
Примечания
-
Если содержимое (в нашем случае изображения) имеет тот же размер, что и представление (в нашем случае
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
Ответ 3
http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
должен дать вам основные идеи очень хорошо.