Рамка UIView, границы, центр, начало координат, когда что использовать?

StackOverflow https://stackoverflow.com/questions/1071112

  •  21-08-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Ответ Марко выше верен, но он просто расширяет вопрос «в каком контексте»…

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

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

границы — это свойство не является свойством позиционирования, но определяет область рисования UIView «относительно» фрейма.По умолчанию это свойство обычно (0, 0, ширина, высота).Изменение этого свойства позволит вам рисовать за пределами рамки или ограничить рисование меньшей областью внутри рамки.Хорошее обсуждение этого вопроса можно найти по ссылке ниже.Редко манипулируют этим свойством, если нет особой необходимости в настройке области рисования.Единственным исключением является то, что большинство программ будут использовать [[UIScreen mainScreen] bounds] при запуске, чтобы определить видимую область приложения и соответствующим образом настроить исходный кадр UIView.

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

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

Другие советы

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

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

frame.origin = center - bounds.size / 2

(что то же самое, что)

center = frame.origin + bounds.size / 2

(и еще есть)

frame.size = bounds.size

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top