UIView
обладает свойствами frame
, bounds
, center
и origin
, и все они , как представляется, связаны между собой . Большую часть времени я имею дело с frame
установкой позиции и размера UIView
. Я понимаю, что frame
использует глобальную систему координат и bounds
использует координаты локального представления (поэтому его x и y равны 0, но не всегда), но меня все еще смущает, когда что использовать.
При каком контексте (и то , что в нужное время) другие свойства ( bounds
, center
, origin
) следует использовать?
Ответы:
Ответ Марко выше верен, но только для того, чтобы расширить вопрос «в каком контексте» ...
frame - это свойство, которое вы чаще всего используете для обычных приложений iPhone. большинство элементов управления будут размещены относительно «содержащего» элемента управления, поэтому frame.origin будет напрямую соответствовать тому, где должен отображаться элемент управления, а frame.size определит, насколько большим должен быть элемент управления.
center - это свойство, на котором вы, вероятно, сосредоточитесь для спрайтовых игр и анимаций, в которых может происходить перемещение или масштабирование. По умолчанию анимация и вращение будут основаны на центре UIView. Редко имеет смысл пытаться управлять такими объектами с помощью свойства frame.
bounds - это свойство не является свойством позиционирования, но определяет область рисования UIView «относительно» фрейма. По умолчанию это свойство обычно (0, 0, ширина , высота ). Изменение этого свойства позволит вам рисовать вне рамки или ограничивать рисование меньшей областью внутри рамки. Хорошее обсуждение этого можно найти по ссылке ниже. Этим свойством редко манипулируют, если нет особой необходимости настраивать область рисования. Единственное исключение состоит в том, что большинство программ будут использовать при
[[UIScreen mainScreen] bounds]
запуске, чтобы определить видимую область для приложения и соответственно установить свой начальный кадр UIView.Почему в UIView есть рамочный прямоугольник и прямоугольник границ?
Надеюсь, это поможет прояснить обстоятельства, при которых каждое свойство может быть использовано.
источник
bounds
они обычно используются, когда к представлению применяется преобразование. При этих обстоятельствахframe
собственность не определена. Как указано в других ответах, изменениеcenter
иbounds
эквивалентно изменению позиции и размера представления соответственно.Они являются связанными значениями и поддерживаются в соответствии с методами установки / получения свойств (и с использованием того факта, что фрейм является чисто синтезированным значением, а не подкрепляется фактической переменной экземпляра).
Основные уравнения:
(что так же, как)
(и есть также)
Это не код, а уравнения для выражения инварианта между тремя свойствами. Эти уравнения также предполагают, что преобразование вашего представления - это тождество, которым оно является по умолчанию. Если это не так, то границы и центр сохраняют то же значение, но рамка может измениться. Если вы не делаете повороты не под прямым углом, кадр всегда будет преобразованным видом с точки зрения координат суперпредставления.
Все это более подробно объясняется полезной мини-библиотекой здесь:
http://bynomial.com/blog/?p=24
источник
Свойства
center
,bounds
иframe
сцепляются: изменение один обновит другие, поэтому использовать их , как вы хотите. Например, вместо изменения параметров x / y,frame
чтобы переназначить представление, просто обновитеcenter
свойство.источник