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

Ну, хотя это поздно темной ночью, я не понимаю, почему есть два разных прямоугольника: рамка и границы.

Как я понимаю, одного прямоугольника было бы достаточно, чтобы сделать все. Позиционирование самого представления относительно другой системы координат, а затем обрезка его содержимого до указанного размера. Что бы вы сделали с двумя прямоугольниками? И как они взаимодействуют друг с другом?

У кого-нибудь есть хорошее объяснение? Один из документов Apple с ребенком, держащим фрукт, не очень хорош для понимания.

Ответ 1

Вот чит-лист:

  • frame - это точка зрения (относительно супервизора)
  • bounds - это то, где view разрешено рисовать (по отношению к себе)

Еще одно разъяснение:

Если вы позиционируете представление в своем супервизоре, вы почти всегда меняете начало кадра.

Если вы обрезаете, где рисуется UIView, вы почти всегда изменяете его границы.

Обратите внимание, что вам разрешено иметь границы, которые больше, чем кадр. То есть вы можете рисовать "вне линий", где вы находитесь.

Ответ 2

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

Ответ 3

В последнее время у меня проблемы с границами, и я провел несколько экспериментов. Свойство bounds ограничивает, где UIView может рисовать, но не ограничивает его subviews. Другие элементы управления ограничениями - это диспетчер событий касания. В представлении не будет, насколько я могу судить, получить события касания, которые находятся за пределами его границ. Кроме того, любое представление, которое вне границ родительского представления также не будет получать события касания. В этих ситуациях вы должны довольно тщательно обновлять границы представления контейнера по мере изменения размера и положения его подзонов. Все всегда будет хорошо нарисовано (потому что подвидности не обрезаны границами их родителя), но прикосновения не будут получены.

(Это действительно должен быть ответ на предыдущий пост, но поскольку я еще не могу ответить, он застрял здесь...)

Ответ 4

Кадр (CGRect) - это координаты и размеры его прямоугольной границы относительно его суперпредставления.

Границы (CGRect) - это координаты и размеры его прямоугольной границы относительно собственного вида.

enter image description here

Узнайте больше здесь