Границы NSView против кадра - PullRequest
       26

Границы NSView против кадра

43 голосов
/ 14 декабря 2011

Какая разница между рамками и рамкой?На самом деле, почему «границы» вообще существуют?Размер «границ» равен размеру фрейма, а начало координат всегда должно быть 0,0.

Ответы [ 5 ]

91 голосов
/ 14 декабря 2011

Из Архитектура вида и окна Руководство по программированию для iOS:

Вид объекта отслеживает его размер и местоположение, используя его рамку, границы, и центр недвижимости:

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

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

Свойство center содержит известную центральную точку обзора в система координат superview.

Вот хорошая визуализация этого объяснения:

enter image description here

9 голосов
/ 10 сентября 2012

Источник привязки не всегда 0,0. Легко понять разницу между рамкой и границами, если вы посмотрите, как изменяется свойство границ в UIScrollView при прокрутке.

Например, у вас есть UIScrollView с фреймом (0, 0, 320, 460), границами (0, 0, 320, 460) и ContentSize (640, 460). Его кадр всегда будет (0, 0, 320, 460), но координата X границ будет меняться в зависимости от расстояния прокрутки.

Это может быть полезно, если вы хотите что-то изменить в вашем UIScrollView (например, создавать и удалять страницы динамически), поэтому вы хотите знать расстояние прокрутки.

8 голосов
/ 14 декабря 2011

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

Из статьи:

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

self.frame

всегда в портретной ориентации. Wha? Да, всегда в портрете - что меняет трансформацию вашего взгляда. Так что ваш

self.bounds

всегда точен (с учетом последнего пункта), но

self.frame

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

1 голос
/ 20 марта 2014

Рамка вида - это размер прямоугольника, в который он может полностью поместиться.Всегда кажется, что границы и рамка совпадают, но это не так.Рассмотрим квадрат, который только повернут примерно на 45 градусов!

Здесь рамка этого повернутого квадрата будет прямоугольником, чтобы полностью заполнить его, и поэтому он будет отличаться от границ этого объекта.

PS в основном в повернутых объектах рамки и границы имеют тенденцию различаться.

0 голосов
/ 03 мая 2018

кадр - это значения координат в системе координат суперпредставления

bounds используется системой рисования для рисования содержимого представления, когда рисование будет завершено, система будет использовать операцию преобразования для назначения содержимого рамке вида

...