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

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

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

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

Ответы [ 4 ]

82 голосов
/ 15 апреля 2009

Вот шпаргалка:

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

Еще несколько уточнений:

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

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

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

5 голосов
/ 15 апреля 2009

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

2 голосов
/ 17 февраля 2011

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

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

0 голосов
/ 28 ноября 2018

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

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

enter image description here

Подробнее здесь - https://medium.com/@GanChau/uiview-frame-vs-bounds-195b9688bde3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...