Вопрос по frame, bounds, uikit, uiview – Рамка UIView, границы, центр, происхождение, когда использовать что?

192

UIView имеет свойстваframe, bounds, center, а такжеoriginи все они кажутся взаимосвязанными. Большую часть времени я имею дело сframe при настройке положения и размераUIView, Я это понимаюframe использует глобальную систему координат иbounds использует координаты локального представления (поэтому его x и y равны 0, но не всегда), но меня все еще смущает, когда что использовать.

В каком контексте (и в какое время) другие свойства (bounds, center, origin) должен быть использован?

Рамка против границ с картинками:stackoverflow.com/a/28917673/3681880 Suragch
Ссылка ниже имеет лучший ответ.stackoverflow.com/questions/5361369/… Ohmy

Ваш Ответ

3   ответа
236

Ответ Марко, приведенный выше, является правильным, но только для того, чтобы подробнее остановиться на вопросе «в каком контексте» ...

frame - это свойство, которое вы чаще всего используете для обычных приложений iPhone. большинство элементов управления будут расположены относительно «содержащего» управление, так что frame.origin будет напрямую соответствовать тому, где должен отображаться элемент управления, а frame.size определит, насколько большим должен быть элемент управления.

center - это свойство, на котором вы, вероятно, сосредоточитесь для спрайтовых игр и анимаций, в которых может происходить перемещение или масштабирование. По умолчанию анимация и вращение будут основаны на центре UIView. Редко имеет смысл пытаться управлять такими объектами с помощью свойства frame.

bounds - это свойство не является свойством позиционирования, но определяет область рисования UIView & quot; относительный & quot; в кадр. По умолчанию это свойство обычно (0, 0,width, height). Изменение этого свойства позволит вам рисовать вне рамки или ограничивать рисование меньшей областью внутри рамки. Хорошее обсуждение этого можно найти по ссылке ниже. Этим свойством редко можно манипулировать, если нет особой необходимости настраивать область рисования. Единственным исключением является то, что большинство программ будет использовать[[UIScreen mainScreen] bounds] при запуске, чтобы определить видимую область для приложения и соответственно установить их начальный кадр UIView.

Почему в UIView есть рамочный прямоугольник и прямоугольник границ?

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

Я думаю, что стоит добавить, чтоbounds обычно используются, когда к представлению применено преобразование. При этих обстоятельствахframe свойство не определено. Как указано в других ответах, изменениеcenter а такжеbounds эквивалентны изменению положения и размера представления соответственно.
35

Они являются связанными значениями и поддерживаются в соответствии с методами установки / получения свойств (и с использованием того факта, что фрейм является чисто синтезированным значением, а не подкрепляется фактической переменной экземпляра).

Основные уравнения:

frame.origin = center - bounds.size / 2

(что так же, как)

center = frame.origin + bounds.size / 2

(и там тоже)

frame.size = bounds.size

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

Все это более подробно объясняется полезной мини-библиотекой здесь:

http://bynomial.com/blog/?p=24

17

Свойстваcenter, bounds а такжеframe заблокированы: изменение одного обновит остальные, поэтому используйте их так, как вы хотите. Например, вместо изменения параметров x / yframe чтобы изменить вид, просто обновитеcenter имущество.

Похожие вопросы