Обзор получения какао

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

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

Поддержка получающего какао

Среда рисования Какао доступна всем приложениям, созданным поверх платформы Набора Приложения (AppKit.framework). Эта платформа определяет многочисленные классы и функции для рисования всего от примитивных форм для объединения изображений и текста. Какао, рисующее также, полагается на некоторые примитивные типы данных, найденные в платформе Основы (Foundation.framework).

Среда рисования Какао совместима со всеми другими технологиями получения в OS X, включая Кварц, OpenGL, Базовое Изображение, Базовое Видео, Кварцевого Композитора, Набор PDF и QuickTime. Фактически, большинство классов Какао использует Кварц экстенсивно в их реализациях, чтобы сделать фактическое получение. В случаях, где Вы находите, Какао не имеет функций, в которых Вы нуждаетесь, это не проблема интегрировать другие технологии в случае необходимости для достижения желаемых эффектов.

Поскольку это основывается на Кварце, платформа Набора Приложения обеспечивает большинство тех же функций, найденных в Кварце, но в объектно-ориентированной обертке. Среди функций, поддерживавших непосредственно Набором Приложения, следующее:

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

Для получения информации о классах, доступных в Какао, посмотрите Ссылку Платформы Ссылки и Основы Платформы AppKit. Для получения информации о том, как интегрировать технологии на базе С в Ваше приложение Какао, посмотрите Слияние Другой Drawing Technologies.

Модель живописца

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

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

Рисунок 1-1  модель живописца
The painter’s model

Среда получения

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

Графический контекст

Можно думать о графическом контексте как место назначения получения. Графический контекст инкапсулирует всю информацию, должен был нарисовать к базовому холсту, включая текущие атрибуты получения и специфичное для устройства представление цифровой краски на холсте. В Какао графические контексты представлены 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. Задействованные поля в каждой из этих структур данных являются значениями с плавающей точкой.

Табличные 1-1  Примитивные типы данных

Ввести

Описание

NSPoint

Тип данных точки состоит из x и y значение. Точки указывают координаты для представленного элемента. Например, Вы используете точки, чтобы определить строки, указать запуск прямоугольника, указать угол дуги, и т.д.

NSSize

Тип данных размера состоит из a width и height поле. Размеры используются для указания размерностей цели. Например, тип данных размера указывает ширину и высоту прямоугольника или эллипса.

NSRect

Прямоугольный тип данных является составной структурой, составленной из точки источника и размера. origin поле указывает расположение нижнего левого угла прямоугольника в текущей системе координат. size поле указывает высоту прямоугольника и ширину относительно точки источника и расширяющийся и вправо. (Отметьте в зеркально отраженных координатных пространствах, точка источника находится в верхнем левом углу, и высота и ширина прямоугольника расширяются вниз и вправо.)

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

Примитивы фигур

Какао предоставляет поддержку для рисования примитивов фигур с NSBezierPath класс. Можно использовать этот класс для создания следующих основных форм, некоторые из которых показаны на рисунке 1-2.

  • Строки

  • Прямоугольники

  • Овалы и круги

  • Дуги

  • Безье кубические кривые

  Примеры рисунка 1-2 примитивов фигур
Examples of shape primitives

Объекты контуров Безье хранят основанную на векторе информацию пути, делая их компактными и разрешение независимый. Можно создать пути с любой из простых форм или объединить основные формы вместе для создания более сложных контуров. Для рендеринга тех форм Вы устанавливаете атрибуты получения для пути и затем перечеркиваете или заполняете его, чтобы «нарисовать» путь к Вашему представлению.

Для получения дополнительной информации о рисовании форм, посмотрите Пути.

Изображения

Поддержка изображений предоставлена NSImage класс и его связанные классы представления изображения (NSImageRep и подклассы). NSImage класс содержит основной интерфейс для создания и управления связанными с изображением данными. Классы представления изображения обеспечивают инфраструктуру, используемую NSImage управлять данными основного изображения.

Изображения могут быть загружены из существующих файлов или созданы на лету. Рисунок 1-3 показывает некоторые растровые изображения, загруженные из файлов.

  Примеры рисунка 1-3 растровых изображений
Examples of bitmap images

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

  • Растровые изображения, включая следующие форматы изображения:

    • BMP

    • GIF

    • JPEG

    • JPEG 2000

    • PNG

    • РАЗМОЛВКА

  • Изображения на основе Инкапсулированного формата PostScript (EPS) данные

  • Изображения на основе данных Portable Document Format (PDF)

  • Изображения на основе данных PICT

  • Базовые изображения Изображения

Поскольку они поддерживают много типов данных, Вы не должны думать об объектах изображения строго как о битовых массивах. Объекты изображения могут также сохранить находящиеся на пути команды рисования, найденные в EPS, PDF и файлах PICT. Они могут представить данные, предоставленные им Базовым Изображением. Они могут интерполировать данные изображения по мере необходимости и представить изображение в различных разрешениях по мере необходимости.

Для получения дальнейшей информации о поддержке Какао изображений и способов использовать изображения в Вашем коде, посмотрите Изображения.

Градиенты

В OS X v10.5 и позже, можно использовать NSGradient класс для создания узоров заливки градиента.

Текст

Какао обеспечивает усовершенствованную текстовую систему для рисования всего от простых строк до потоков форматированного текста. Рисунок 1-4 показывает некоторые основные примеры стилизованного текста, что можно создать.

  Примеры рисунка 1-4 текста
Examples of text

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

Представления и получение

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

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

В дополнение к стандартным представлениям и средствам управления, можно также создать собственные представления. Вы создаете пользовательские представления в случаях, где поведение, которое Вы ищете, не предоставлено ни одним из стандартных представлений. Какао уведомляет Ваше представление, что оно должно нарисовать себя путем отправки представления a drawRect: сообщение. Ваша реализация drawRect: метод - то, куда идет весь Ваш код для прорисовки.

По умолчанию обновления окна происходят только в ответ на пользовательские действия. Это означает что Ваше представление drawRect: метод вызывают только, когда что-то о Вашем представлении изменилось. Например, когда действие прокрутки заставляет ранее скрытую часть Вашего представления быть представленной, Какао вызывает метод. Какао также вызывает его в ответ на запросы от Вашего собственного кода. Если информация, выведенная на экран Вашими пользовательскими изменениями представления, необходимо сказать Какао явно о желании надлежащих частей обновленного представления. Вы делаете так путем лишения законной силы частей видимой области представления. Какао собирает лишенные законной силы области вместе и генерирует надлежащий drawRect: сообщения для перерисовки содержания.

Несмотря на то, что существуют многочисленные способы нарисовать, основное drawRect: метод имеет следующую структуру:

- (void)drawRect:(NSRect)rect
{
    // Draw your content
}

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

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

Для получения дополнительной информации о представлениях и живом изменении размеров, см. Руководство по программированию Представления. Для получения дополнительной информации о печати в Какао, посмотрите Настройку Получения Представления для Печати в Печати Руководства по программированию для Mac.

Общие задачи получения

Таблица 1-2 перечисляет некоторые общие задачи, связанные с рисованием содержания Вашего представления, и дает совет о том, как выполнить те задачи.

Табличные 1-2  Общие задачи и решения

Задача

Как выполнить

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

Реализация a drawRect: метод в Вашем пользовательском представлении. Используйте свою реализацию этого метода для рисования довольный пути использования, изображения, текст или любые другие инструменты, доступные Вам в Какао, Кварце или OpenGL.

Обновите пользовательское представление для отражения измененного содержания.

Отправьте a setNeedsDisplayInRect: или setNeedsDisplay: обменивайтесь сообщениями к представлению. Отправка или этих сообщений отмечает часть или все представление как недопустимые и нуждающиеся в обновлении. Какао отвечает путем отправки a drawRect: обменивайтесь сообщениями к своему представлению во время следующего цикла обновления.

Анимируйте некоторое содержание в представлении.

Используйте Базовую Анимацию, установите таймер или используйте NSAnimation или NSViewAnimation классы, для генерации уведомлений на уровне нужного кадра. После получения уведомления таймера лишите законной силы часть или все Ваше представление для принуждения обновления. Для получения информации о Базовой Анимации см. Базовое Руководство по программированию Анимации. Для получения дополнительной информации об анимации с таймерами, посмотрите Используя NSTimer для Анимированного контента. Для получения информации об использовании NSAnimation объекты, посмотрите Используя Объекты Animation Какао.

Нарисуйте во время живого, изменяют размеры.

Используйте inLiveResize метод NSView определить, изменяет ли живое размеры, происходит. Если это, нарисуйте как можно меньше при обеспечении, что представление имеет взгляд, который Вы хотите. Для получения дополнительной информации о живой оптимизации изменения размеров, см. Инструкции по Производительности Получения.

Нарисуйте во время работы печати.

Используйте currentContextDrawingToScreen метод класса или isDrawingToScreen метод экземпляра NSGraphicsContext определить, ли работа печати в стадии реализации. Используйте attributes метод NSGraphicsContext получать (по мере необходимости) любую дополнительную информацию о текущем задании печати. Нарисуйте изображения в самом лучшем разрешении. Скорректируйте свою графику любыми другими способами, которыми Вы думаете, являются надлежащими для достижения самого лучшего появления на целевом устройстве. Для получения дополнительной информации о печати, см. Руководство по программированию Печати для Mac.

Создайте PDF или данные EPS от представления.

Используйте dataWithPDFInsideRect: или dataWithEPSInsideRect: метод для получения данных. В Вашем drawRect: использование метода currentContextDrawingToScreen метод класса или isDrawingToScreen метод экземпляра NSGraphicsContext определить, ли работа печати в стадии реализации.