2011-12-13 2 views
41

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

+1

Возможный дубликат [Какао: какая разница между рамкой и границами?] (Http://stackoverflow.com/questions/1210047/cocoa-whats-the-difference-between-the-frame-and-the -bounds) – daisy

ответ

90

Из Руководства View and Window Architecture программирования для прошивки:

Объект вида отслеживает его размер и местоположение с помощью рамы, границ, и центральных свойств:

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

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

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

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

enter image description here

+7

Исправить. См. Мой вопрос. Оценки всегда были бы 0,0 для начала координат, а размеры были бы одинаковыми. Итак, почему же вообще существуют границы, поскольку кадр включает в себя всю информацию о всех связанных? – David

+2

Я никогда не смотрел на это. Но кажется очевидным, что вам нужны две ссылки. Потому что 40,40 не подходит для происхождения содержимого представления, но верно для ссылки на то, где представление находится внутри супервизора. Я также предполагаю, что представление должно знать о своем собственном пространстве содержимого и давать информацию о том, где он должен быть (Frame). Информация может выглядеть одинаково, но на самом деле это две разные вещи. Посмотрите на них как на вид. Кадр ссылки на то, где он находится. И это границы, которые формируют себя – markhunte

+10

Хотя этот ответ в целом правильный, поскольку это вопрос Mac (он помечен 'NSView'), соответствующая документация является [Просмотр руководства по программированию для какао] (http://developer.apple.com /library/mac/#documentation/Cocoa/Conceptual/CocoaViewsGuide/Introduction/Introduction.html), а не версию iOS, с которой вы связались. Обратите внимание, что на Mac система координат перевернута по умолчанию, с начальной точкой в ​​нижнем левом углу. –

8

яблоко документы в первом ответе не покрывает то, что происходит с рамкой и рамок после поворота к альбомной ориентации. Чтобы быть более полным, вы должны знать, что рамка окна и корневой вид не изменяется после вращения, но границы выполняются. See this article для получения более подробной информации и будьте осторожны с использованием рамки как ссылки для чего-либо, кроме портретной ориентации.

Из статьи:

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

self.frame 

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

self.bounds 

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

self.frame 

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

9

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

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

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

1

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

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

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

Смежные вопросы