Обзор получения какао
Получение является фундаментальной частью большинства приложений Какао. Если Ваше приложение использует только стандартные системные средства управления, то Какао делает все получение для Вас. Если Вы используете пользовательские представления или средства управления, тем не менее, тогда Вам решать для создания их видимости с помощью команд рисования.
Следующие разделы обеспечивают быстрый тур по связанным с получением функциям, доступным в Какао. Последующие главы предоставляют больше подробную информацию о каждой функции, и также включают примеры для многих общих задач, которые Вы могли бы выполнить во время получения.
Поддержка получающего какао
Среда рисования Какао доступна всем приложениям, созданным поверх платформы Набора Приложения (AppKit.framework
). Эта платформа определяет многочисленные классы и функции для рисования всего от примитивных форм для объединения изображений и текста. Какао, рисующее также, полагается на некоторые примитивные типы данных, найденные в платформе Основы (Foundation.framework
).
Среда рисования Какао совместима со всеми другими технологиями получения в OS X, включая Кварц, OpenGL, Базовое Изображение, Базовое Видео, Кварцевого Композитора, Набор PDF и QuickTime. Фактически, большинство классов Какао использует Кварц экстенсивно в их реализациях, чтобы сделать фактическое получение. В случаях, где Вы находите, Какао не имеет функций, в которых Вы нуждаетесь, это не проблема интегрировать другие технологии в случае необходимости для достижения желаемых эффектов.
Поскольку это основывается на Кварце, платформа Набора Приложения обеспечивает большинство тех же функций, найденных в Кварце, но в объектно-ориентированной обертке. Среди функций, поддерживавших непосредственно Набором Приложения, следующее:
Находящееся на пути получение (также известный как основанное на векторе получение)
Сглаженный рендеринг
Как Кварц, среда рисования Какао использует в своих интересах аппаратное обеспечение машинной графики по мере возможности для ускорения операций рисования. Эта поддержка является автоматической. Вы не должны включать его явно в Вашем коде.
Для получения информации о классах, доступных в Какао, посмотрите Ссылку Платформы Ссылки и Основы Платформы AppKit. Для получения информации о том, как интегрировать технологии на базе С в Ваше приложение Какао, посмотрите Слияние Другой Drawing Technologies.
Модель живописца
Как Кварц, рисование Какао использует модель живописца для обработки изображений. В модели живописца каждая последовательная операция рисования применяет уровень «краски» к выводу «холст». Поскольку новые уровни краски добавляются, ранее нарисованные элементы могут быть затенены (или частично или полностью) или изменены новой краской. Эта модель позволяет Вам создавать чрезвычайно сложные изображения из небольшого количества мощных примитивов.
Рисунок 1-1 показывает, как модель живописца работает и демонстрирует, как важный порядок получения может быть при рендеринге содержания. В первом результате, каркасная форма слева рисуется сначала, сопровождается существенной формой, затеняя всех кроме периметра каркасной формы. Когда формы нарисованы в противоположном порядке, результаты очень отличаются. Поскольку каркасная форма имеет больше дыр в ней, части существенной формы показывают через те дыры.
Среда получения
Среда получения охватывает цифровой холст и графические настройки, определяющие заключительный вид Вашего содержания. Холст определяет, где Ваше содержание нарисовано, в то время как графические настройки управляют каждым аспектом получения, включая размер, цвет, качество и ориентацию Вашего содержания.
Графический контекст
Можно думать о графическом контексте как место назначения получения. Графический контекст инкапсулирует всю информацию, должен был нарисовать к базовому холсту, включая текущие атрибуты получения и специфичное для устройства представление цифровой краски на холсте. В Какао графические контексты представлены NSGraphicsContext
класс и используется для представления следующих мест назначения получения:
Windows (и их представления)
Изображения (включая битовые массивы всех видов)
Принтеры
Файлы (PDF, EPS)
Поверхности OpenGL
Безусловно, наиболее распространенное место назначения получения является окнами Вашего приложения, и расширением его представления. Какао поддерживает графические объекты контекста на основе на поток, на окно для Вашего приложения. Это означает, что для данного окна, существует столько же графических контекстов для того окна, сколько существуют потоки в Вашем приложении. Несмотря на то, что большая часть получения происходит на основном потоке Вашего приложения, дополнительные графические объекты контекста позволяют нарисовать из вторичных потоков также.
Для большинства других операций рисования Какао создает графические контексты по мере необходимости и конфигурирует их прежде, чем вызвать Ваш код для прорисовки. В некоторых случаях действия Вы взятие могут создать графический контекст косвенно. Например, при создании файла PDF, Вы могли бы просто запросить данные PDF для определенной части Вашего объекта представления. Негласно, Какао фактически создает графический объект контекста и вызывает код для прорисовки Вашего представления для генерации данных PDF.
Можно также создать графические контексты явно для обработки получения в особых ситуациях. Например, один способ создать растровое изображение состоит в том, чтобы создать растровый холст и затем создать графический контекст, рисующий непосредственно к тому холсту. Существуют другие способы создать графические объекты контекста явно, несмотря на то, что большинство включает получение на экран или на изображение. Очень редко, чтобы Вы когда-либо создавали бы графический объект контекста для печати или генерации данные EPS или PDF.
Для получения информации о графических контекстах посмотрите Графические Контексты.
Состояние графики
В дополнение к управлению местом назначения получения, NSGraphicsContext
объект также управляет состоянием графики, связанным с текущим местом назначения получения. Состояние графики состоит из атрибутов, влияющих на способ, которым содержание нарисовано, такие как ширина строки, цвет обводки и цвет заливки. Текущее состояние графики может быть сохранено на штабеле, сохраняющемся текущим графическим объектом контекста. Любые последующие изменения к состоянию графики могут тогда быть отменены быстро путем простого восстановления предыдущего состояния графики. Эта возможность сохранить и восстановить состояние графики обеспечивает простой путь к Вашему коду для прорисовки для возврата к известному набору атрибутов.
Какао управляет некоторыми атрибутами состояния графики немного отличающимся способом, чем Кварц. Например, текущий цвет обводки и цвет заливки установлены с помощью NSColor
класс и большинство находящихся на пути параметров установлены с помощью NSBezierPath
класс. Этот сдвиг ответственности отражает более объектно-ориентированную природу Какао.
Для получения дополнительной информации об атрибутах, включающих текущее состояние графики и объекты, управляющие ими, посмотрите информацию о Состоянии графики.
Система координат
Система координат, поддерживаемая Какао, идентична тому, используемому в Основанных на кварце приложениях. Все координаты указаны с помощью значений с плавающей точкой вместо целых чисел. Ваш код рисует в пользовательском координатном пространстве. Ваши команды рисования преобразовываются в координатное пространство устройства, где они тогда представляются к целевому устройству.
Пользовательское координатное пространство использует фиксированный масштаб для координатных значений. В этом координатном пространстве один модуль эффективно равен 1/72 дюйма. Несмотря на то, что кажется, что это могло бы подразумевать 72 точки на дюйм (точки на дюйм) разрешение для рисования, это - ошибка принять это. Фактически, пользовательское координатное пространство не имеет никакого свойственного понятия пикселей или точек на дюйм. Использование значений с плавающей точкой позволяет Вам сделать точное расположение в пользовательском координатном пространстве и позволить Какао волноваться о преобразовании Ваших координат к пространству устройства.
Поскольку имя подразумевает, координатное пространство устройства относится к собственному координатному пространству, использованному целевым устройством, обычно монитором или принтером. В отличие от пользовательского координатного пространства, модули которого эффективно фиксируются, модули координатного пространства устройства связываются к разрешению целевого устройства, которое может варьироваться. Какао обрабатывает преобразование координат от пространства пользователя до пространства устройства автоматически во время рендеринга, таким образом, редко необходимо работать с координатами устройства непосредственно.
Для получения дополнительной информации о системах координат в Какао, посмотрите Основы Систем координат.
Преобразовывает
Преобразование является математической конструкцией, используемой для управления координатами в двумерном пространстве. Преобразования используются экстенсивно в графических вычислениях для упрощения процесса получения. Координатные значения умножаются через математическую матрицу преобразования для получения измененной координаты, отражающей свойства преобразования.
В какао, NSAffineTransform
класс реализует поведение преобразования. Вы используете этот класс для применения следующих эффектов к текущей системе координат:
Можно объединить предыдущие эффекты в различных комбинациях для достижения интересных результатов. Во время получения Какао применяет эффекты к содержанию, которое Вы рисуете, передавая те характеристики на Ваших формах и изображениях. Поскольку все координаты умножаются через преобразование в некоторый момент во время рендеринга, добавление этих эффектов имеет мало эффекта на производительность. Фактически, управление Вашими преобразованиями использования форм часто быстрее, чем управление Вашими исходными данными непосредственно.
Для получения дополнительной информации о преобразованиях, включая то, как они влияют на Ваше содержание и как Вы используете их, посмотрите Системы координат, и Преобразовывает.
Цветовые и цветовые пространства
Цвет является важной частью получения. Прежде, чем нарисовать любой элемент, необходимо выбрать цвета для использования при рендеринге того элемента. Какао предоставляет полную поддержку для указания информации о цвете в любом из нескольких различных цветовых пространств. Поддержка также предоставлена для создания цветов, найденных в профилях International Color Consortium (ICC) и ColorSync.
Прозрачность является другим фактором, влияющим на появление цветов. В OS X прозрачность используется для рендеринга реалистично выглядящего содержания и эстетически привлекательных эффектов. Какао предоставляет полную поддержку для добавления прозрачности к цветам.
В какао, NSColor
и NSColorSpace
классы обеспечивают реализацию для объектов цветового пространства и цветовых объектов. Для получения дополнительной информации о том, как работать с, раскрашивает Какао, посмотрите Цвет и Прозрачность.
Основные элементы получения
Создание сложной графики часто имеет простое начало. В Какао все Вы получение получено из ряда основных элементов, которые Вы собираете в своем коде для прорисовки. Эти элементы являются основным принципом всех операций рисования и описаны в следующих разделах.
Поддержка геометрии
Какао обеспечивает свои собственные структуры данных для управления основными геометрическими данными, такие как точки и прямоугольники. Какао определяет типы данных, перечисленные в Таблице 1-1. Задействованные поля в каждой из этих структур данных являются значениями с плавающей точкой.
Для получения информации о том, как управлять точкой, прямоугольником и типами данных размера, посмотрите Управляющие Геометрические Типы.
Примитивы фигур
Какао предоставляет поддержку для рисования примитивов фигур с NSBezierPath
класс. Можно использовать этот класс для создания следующих основных форм, некоторые из которых показаны на рисунке 1-2.
Объекты контуров Безье хранят основанную на векторе информацию пути, делая их компактными и разрешение независимый. Можно создать пути с любой из простых форм или объединить основные формы вместе для создания более сложных контуров. Для рендеринга тех форм Вы устанавливаете атрибуты получения для пути и затем перечеркиваете или заполняете его, чтобы «нарисовать» путь к Вашему представлению.
Для получения дополнительной информации о рисовании форм, посмотрите Пути.
Изображения
Поддержка изображений предоставлена NSImage
класс и его связанные классы представления изображения (NSImageRep
и подклассы). NSImage
класс содержит основной интерфейс для создания и управления связанными с изображением данными. Классы представления изображения обеспечивают инфраструктуру, используемую NSImage
управлять данными основного изображения.
Изображения могут быть загружены из существующих файлов или созданы на лету. Рисунок 1-3 показывает некоторые растровые изображения, загруженные из файлов.
Какао поддерживает много различных форматов изображения, любой прямо или косвенно. Некоторые поддержки Какао форматов непосредственно включают следующее:
Растровые изображения, включая следующие форматы изображения:
Изображения на основе Инкапсулированного формата PostScript (EPS) данные
Изображения на основе данных Portable Document Format (PDF)
Поскольку они поддерживают много типов данных, Вы не должны думать об объектах изображения строго как о битовых массивах. Объекты изображения могут также сохранить находящиеся на пути команды рисования, найденные в EPS, PDF и файлах PICT. Они могут представить данные, предоставленные им Базовым Изображением. Они могут интерполировать данные изображения по мере необходимости и представить изображение в различных разрешениях по мере необходимости.
Для получения дальнейшей информации о поддержке Какао изображений и способов использовать изображения в Вашем коде, посмотрите Изображения.
Градиенты
В OS X v10.5 и позже, можно использовать NSGradient
класс для создания узоров заливки градиента.
Текст
Какао обеспечивает усовершенствованную текстовую систему для рисования всего от простых строк до потоков форматированного текста. Рисунок 1-4 показывает некоторые основные примеры стилизованного текста, что можно создать.
Поскольку текстовое расположение и представляющий использование текстовой системы Какао является очень сложным процессом, это уже хорошо документируется в другом месте и не покрыто очень подробно в этом документе. Для основной информации о рисовании текста и для ссылок к более усовершенствованным связанным с текстом документам, см. текст.
Представления и получение
Почти все получение в Какао сделано в представлениях. Представления являются объектами, представляющими визуальную часть окна. Каждый объект представления ответственен за отображение некоторого визуального содержания и ответ на пользовательские события в его видимой области. Представление может также быть ответственно за одно или более подпредставлений.
NSView
класс является базовым классом для всех связанных с представлением объектов. Какао определяет несколько типов представлений для отображения стандартного содержания, включая текстовые представления, представления разделения, представления вкладки, представления линейки, и т.д. Средства управления какао также на основе NSView
класс и реализация соединяют интерфейсом с элементами, такими как кнопки, скроллеры, таблицы и текстовые поля.
В дополнение к стандартным представлениям и средствам управления, можно также создать собственные представления. Вы создаете пользовательские представления в случаях, где поведение, которое Вы ищете, не предоставлено ни одним из стандартных представлений. Какао уведомляет Ваше представление, что оно должно нарисовать себя путем отправки представления a drawRect:
сообщение. Ваша реализация drawRect:
метод - то, куда идет весь Ваш код для прорисовки.
По умолчанию обновления окна происходят только в ответ на пользовательские действия. Это означает что Ваше представление drawRect:
метод вызывают только, когда что-то о Вашем представлении изменилось. Например, когда действие прокрутки заставляет ранее скрытую часть Вашего представления быть представленной, Какао вызывает метод. Какао также вызывает его в ответ на запросы от Вашего собственного кода. Если информация, выведенная на экран Вашими пользовательскими изменениями представления, необходимо сказать Какао явно о желании надлежащих частей обновленного представления. Вы делаете так путем лишения законной силы частей видимой области представления. Какао собирает лишенные законной силы области вместе и генерирует надлежащий drawRect:
сообщения для перерисовки содержания.
Несмотря на то, что существуют многочисленные способы нарисовать, основное drawRect:
метод имеет следующую структуру:
- (void)drawRect:(NSRect)rect |
{ |
// Draw your content |
} |
Вот именно! К этому времени Ваш drawRect:
метод вызывают, Какао уже заблокировало внимание получения на Ваше представление, сохранило состояние графики, скорректировало текущую матрицу преобразования к источнику Вашего представления и скорректировало прямоугольник отсечения к кадру Вашего представления. Все, что необходимо сделать, является получением содержание.
В действительности, Ваш drawRect:
метод часто намного более сложен. Ваш собственный метод мог бы использовать несколько других объектов и методов для обработки фактического получения. Вы также, возможно, должны были бы сохранить и восстановить состояние графики один или несколько раз. Поскольку этот отдельный метод используется для всего получения Вашего представления, он также должен обработать несколько различных ситуаций. Например, Вы могли бы хотеть сделать более точное получение во время печати или использовать в большой степени оптимизированный код во время живой работы изменения размеров. Опции являются многочисленными и охвачены более подробно в последующих главах.
Для получения дополнительной информации о представлениях и живом изменении размеров, см. Руководство по программированию Представления. Для получения дополнительной информации о печати в Какао, посмотрите Настройку Получения Представления для Печати в Печати Руководства по программированию для Mac.
Общие задачи получения
Таблица 1-2 перечисляет некоторые общие задачи, связанные с рисованием содержания Вашего представления, и дает совет о том, как выполнить те задачи.
Задача |
Как выполнить |
---|---|
Реализация a |
|
Обновите пользовательское представление для отражения измененного содержания. |
Отправьте a |
Используйте Базовую Анимацию, установите таймер или используйте |
|
Используйте |
|
Используйте | |
Используйте |