Геометрия представления

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

Система координат представления

От его начала Кварцевая среда графики была разработана, чтобы быть разрешением, независимым через устройства вывода. Т.е. 1 квадрат модуля не обязательно соответствует непосредственно 1 пикселю. Когда дело доходит до поддержки независимости разрешения, Кварца в сочетании с NSView предоставляет большую часть поддержки, в которой Вы нуждаетесь автоматически. Когда представление рисует свое содержание, масштабными коэффициентами независимости разрешения управляют автоматически.

Расположение представления выражено с помощью той же системы координат, которую использует Кварцевая среда графики. По умолчанию графический источник среды (0.0 0.0) расположен в нижнем левом, и значения указаны как числа с плавающей точкой, увеличивающиеся и вправо в модулях системы координат. Модули системы координат, квадрат модуля, являются размером 1.0 1,0 прямоугольниками.

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

Понимание кадра и границ представления

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

Представление отслеживает свой размер и расположение с помощью двух прямоугольников: прямоугольник кадра и прямоугольник границ. Прямоугольник кадра определяет расположение представления и размер в суперпредставлении с помощью системы координат суперпредставления. Прямоугольник границ определяет внутреннюю систему координат, использующуюся при рисовании содержания представления, включая источник и масштабирование. Рисунок 2-1 показывает отношение между прямоугольником кадра, слева, и прямоугольником границ, справа.

  Отношение рисунка 2-1 между прямоугольником кадра представления и прямоугольником границ
Relationship between a view's frame rectangle and bounds rectangle

Когда экземпляр представления создается программно с помощью, кадр представления указан initWithFrame: метод. Прямоугольник кадра передается как параметр. NSView метод frame возвращает прямоугольник кадра получателя. Когда представление инициализируется, прямоугольник границ установлен произойти в (0.0, 0.0), и размер границ установлен в тот же размер как кадр представления. Если изменения приложений прямоугольник границ представления, это обычно делает так сразу после инициализации. Прямоугольник границ представления возвращается методом bounds.

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

  Содержание границ Представления рисунка 2-2 простиралось для адаптации прямоугольнику кадра
View's bounds content stretched to fit the frame rectangle

Несмотря на то, что прямоугольник границ указывает часть содержания представления, показанного в кадре представления, существуют ситуации, где только подраздел содержания представления например выведен на экран, если кадр работает за пределами кадра суперпредставления. Когда это происходит, содержание отсекается как показано слева на рисунке 2-3.

  Содержание Представления рисунка 2-3, отсеченное к его суперпредставлению
View's content clipped to its superview

Видимый прямоугольник представления отражает часть содержания, фактически выведенного на экран, с точки зрения системы координат границ представления (прямоугольник справа на рисунке 2-3). Не часто важно знать, каков видимый прямоугольник, так как механизм дисплея автоматически ограничивает получение видимыми частями представления. Если подкласс должен выполнить дорогой пред вычисление для создания его изображения, это может использовать visibleRect метод для ограничения его работы тем, что фактически необходимо.

Преобразование системы координат

По умолчанию система координат представления базируется в (0.0, 0.0) в нижнем левом углу его прямоугольника границ, его квадрат модуля (размер 1.0 1,0 прямоугольниками) является тем же размером как те из его суперпредставления, и его оси параллельны тому из его прямоугольника кадра. Система координат представления может быть изменена четырьмя отличными способами: Это может переводиться, масштабироваться, зеркально отражаться или поворачиваться.

Чтобы перевести или масштабировать систему координат, Вы изменяете прямоугольник границ представления. Изменение прямоугольника границ устанавливает основную систему координат, с которой начинается все получение, выполняемое представлением. Конкретные подклассы NSView обычно изменяйте прямоугольник границ сразу по мере необходимости в их initWithFrame: методы или после загрузки файла пера, содержащего представление.

Метод для изменения прямоугольника границ setBounds:, который и позиции и масштабы холст. Источник прямоугольника обеспечил для setBounds: становится нижним левым углом прямоугольника границ, и размер прямоугольника сделан поместиться в прямоугольник кадра, эффективно масштабируя нарисованное изображение представления. На рисунке 2-4 прямоугольник границ от рисунка 2-1 перемещен и удвоен в размере; результат появляется справа.

Рисунок 2-4  , Изменяющий границы представления
Altering a view's bounds

Можно также установить компоненты прямоугольника границ независимо, с помощью setBoundsOrigin: и setBoundsSize:.

Другой набор методов переводит и масштабирует систему координат в относительном выражении; при вызове их неоднократно их эффекты накапливаются. Эти методы translateOriginToPoint: и scaleUnitSquareToSize:.

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

Представление может также указать, что зеркально отражается его система координат. Зеркально отраженная система координат основывается на источнике (0.0 0.0) находиться в верхнем левом углу его прямоугольника границ, как показано на рисунке 2-5.

  Координаты представления Flipped рисунка 2-5
Flipped view coordinates

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

Указание, что подкласс представления использует зеркально отраженную систему координат, сделано путем переопределения isFlipped метод. Реализация по умолчанию NSView возвраты NO, что означает, что источник системы координат находится в нижнем левом углу прямоугольника границ по умолчанию и выполнениях оси y от нижней части до вершины. Когда подкласс переопределяет этот метод для возврата YES, машинное оборудование представления автоматически корректирует себя, чтобы предположить, что верхний левый угол является источником.

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

Также возможно повернуть систему координат вокруг своего источника в прямоугольнике границ (не источник самого прямоугольника границ). setBoundsRotation: метод устанавливает вращение системы координат к углу, в градусах, переданных как параметр. rotateByAngle: метод позволяет Вам указывать угол вращения относительно текущего вращения системы координат.

Вращение системы координат представления также увеличивает видимый прямоугольник для учета вращения, так, чтобы это было выражено в повернутых координатах, все же полностью покрывает видимую часть прямоугольника кадра. Это добавляет области, которые должны быть нарисованы, все же никогда не будет выводиться на экран (треугольные области, показанные на рисунке 2-6).

Рисунок 2-6  Видимый прямоугольник повернутого представления
Visible rectangle of a rotated view

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