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

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

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

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

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

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

введите описание изображения здесь

Узнайте больше здесь - https://medium.com/@GanChau/uiview-frame-vs-bounds-195b9688bde3

Другие вопросы по тегам