Графические контексты
Графические контексты являются фундаментальной частью инфраструктуры получения в приложениях Какао. Как имя предполагает, графический контекст обеспечивает контекст для последующих операций рисования. Это идентифицирует текущее место назначения получения (экран, принтер, файл, и т.д.), система координат и границы для базового холста и любые графические атрибуты, связанные с местом назначения.
Для большей части получения Вы делаете в Какао, Вы никогда не должны создавать графический контекст сами. Нормальный цикл получения в Какао автоматически создает и конфигурирует графический контекст для Вас для использования. Для некоторого усовершенствованного получения, однако, Вы, возможно, должны создать свой собственный графический контекст до получения.
В приложении Какао графические контексты для почти всех типов холста представлены NSGraphicsContext
класс. Вы используете графические объекты контекста, чтобы управлять графическими атрибутами и получить информацию о текущей среде получения.
Эта глава обеспечивает обзор контекстов графики Какао и как Вы используете их в своем приложении. Это включает информацию о том, как создать контексты индивидуального изображения и когда могло бы быть надлежащим сделать так.
Графические основы контекста
Основное задание любого графического объекта контекста должно поддержать информацию о текущем состоянии среды получения. В Кварце графический объект контекста связан с окном, битовым массивом, файлом PDF или другим устройством вывода и поддерживает информацию для того устройства. То же является истиной для контекста графики Какао, но потому что получение Какао основано на представлении, некоторые дополнительные изменения внесены в среду получения перед Вашим представлением drawRect:
метод вызывают.
К этому времени Ваше представление drawRect:
метод вызывают, Какао удостоверилось, что любые вызовы получения, которые Вы выполняете, остаются в ограничениях Вашего представления. Это сохраняет состояние графики для упрощения процесса отмены его изменений позже. Это добавляет надлежащее преобразование к текущей матрице преобразования для размещения источника получения в источнике представления. Это также устанавливает область отсечения в видимые границы Вашего представления, препятствуя тому, чтобы любое представленное содержание отклонилось в другие представления. Ваше представление является эффективно звездой шоу, по крайней мере до другого представления drawRect:
метод вызывают.
В то время как текущий контекст фокусируется на Вашем представлении, можно нарисовать пути, изображения, текст или любое другое содержание, которое Вы хотите. Можно также изменить атрибуты текущей среды получения для достижения появления, которое Вы хотите для своего содержания. В конечном счете, содержание Вы, которых получение отправляется Кварцевому Наборщику, где это объединено с содержанием от других представлений в окне и сброшено на экран или устройство вывода.
После Вашего drawRect:
возвраты метода, Какао проходит через процесс сброса среды получения для следующего представления. Это возвращается любые изменения, которые Вы внесли в среду получения и устанавливаете координатное преобразование и область отсечения для следующего представления, давая ему его собственную нетронутую среду, в которой можно работать. Этот процесс тогда повторяет себя во время каждого цикла обновления в Вашем приложении.
Текущий контекст
Каждый поток в приложении Какао имеет свой собственный графический объект контекста для данного окна. Можно получить доступ к этому объекту от кода с помощью currentContext
метод NSGraphicsContext
, как показано в следующем примере:
NSGraphicsContext* aContext = [NSGraphicsContext currentContext]; |
currentContext
метод всегда возвращает объект контекста графики Какао, который является подходящим для текущей среды получения. Этот объект отслеживает текущее состояние графики, позволяет Вам сохранить и восстановить информацию о состоянии графики, и позволяет Вам изменить много атрибутов состояния графики. Изменения, которые Вы вносите в состояние графики, влияют на все последующие вызовы получения. При изменении атрибута несколько раз только новая установка используется.
Для сохранения текущего состояния графики Вы используете saveGraphicsState
метод NSGraphicsContext
. Этот метод по существу продвигает копию текущего состояния на штабель, оставлять Вас освобождает для внесения изменений в текущее состояние. Когда Вы хотите вернуться назад к предыдущему состоянию, Вы просто вызываете restoreGraphicsState
метод, чтобы вытолкать текущее состояние графики (включая все изменения начиная с последнего сохранения) прочь штабеля и восстановить предыдущее состояние.
Если Вы планируете изменить текущее состояние графики значительно, это - хорошая идея сохранить текущее состояние прежде, чем внести Ваши изменения. Изменение одного или двух атрибутов обычно может не заслуживать сохранение состояния графики, так как можно сбросить или изменить те отдельные атрибуты легко. Однако при изменении больше чем одного или двух атрибутов обычно проще сохранить и восстановить все состояние графики. Можно вызвать saveGraphicsState
метод как часто по мере необходимости в Вашем коде для сохранения снимков текущего состояния графики но, несомненно, необходимо будет сбалансировать каждый вызов с соответствующего вызова к restoreGraphicsState
.
Следующий пример показывает простое drawRect:
метод, выполняющий итерации по массиву определенных разработчиками объектов, каждый из которых нарисован с различным набором атрибутов. Состояние графики сохраняется и восстанавливается во время каждой итерации цикла, гарантируя, что каждый объект запускается с того же состояния графики.
- (void)drawRect:(NSRect)rect |
{ |
NSGraphicsContext* theContext = [NSGraphicsContext currentContext]; |
int i; |
int numObjects = [myObjectArray count]; |
// Iterate over an array of objects |
// Set the attributes for each before drawing |
for (i = 0; i < numObjects; i++) |
{ |
[theContext saveGraphicsState]; |
// Set the drawing attributes |
// Draw the object |
[theContext restoreGraphicsState]; |
} |
} |
Информация о состоянии графики
Каждый объект контекста графики Какао поддерживает информацию о текущем состоянии среды получения. Эта информация колеблется от глобальных настроек рендеринга до атрибутов, используемых для рендеринга текущего пути, и является той же информацией состояния, сохраненной Кварцем. Каждый раз, когда Вы сохраняете текущее состояние графики, Вы сохраняете копию настроек, перечисленных в Таблице 2-1.
Атрибут |
Описание |
---|---|
Карты указывают в системе координат представления на точки в системе координат устройства назначения. Какао изменяет CTM прежде, чем вызвать Ваше представление |
|
Указывает область холста, который может быть нарисован путем рисования вызовов. Какао изменяет область отсечения к видимой области Вашего представления прежде, чем вызвать |
|
Указывает ширину путей. Ширина строки по умолчанию |
|
Указывает, как объединены две связанных строки. Стиль соединения по умолчанию |
|
Указывает появление открытой точки на пути. Стиль окончания линии по умолчанию |
|
Определяет поврежденный образец для строк, включая начальную фазу для стиля. Нет никакого стиля тире по умолчанию, приводящего к сплошным линиям. Вы изменяете стили тире для пути с помощью |
|
Когда к строкам нужно присоединиться со скосом вместо среза, определяет. Применяется только, когда стиль соединения строки установлен в |
|
Указывает точность, с которой представляются кривые. (Это - также допуск максимальной погрешности, измеренный в пикселях.) Меньшие числа приводят к более гладким кривым за счет большего количества вычислений. Интерпретация этого значения может варьироваться немного на различных устройствах рендеринга. Значение по умолчанию |
|
Указывает цвет, используемый для рендеринга путей. Этот цвет применяется только к самой строке пути, не области, которую охватывает путь. Можно указать цвета с помощью любого из поддерживаемых системой цветовых пространств. Это значение включает информацию об альфе. Информацией о цвете управляют |
|
Указывает, что цвет раньше заполнял область, включенную путем. Можно указать цвета с помощью любого из поддерживаемых системой цветовых пространств. Это значение включает информацию об альфе. Информацией о цвете управляют |
|
Указывает теневые атрибуты для применения к представленному содержанию. Вы устанавливаете тени с помощью | |
Указывает, что метод раньше отображал цвета в палитре на палитру пространства текущего цвета. Какао не поддерживает установку этого атрибута непосредственно. Вместо этого необходимо использовать Кварц. Для получения дополнительной информации посмотрите Отображающиеся Физические цвета к Цветовому пространству. |
|
Указывает шрифт для использования при рисовании текста. Вы изменяете информацию о шрифтах с помощью |
|
Указывает размер шрифта для использования при рисовании текста. Вы изменяете информацию о шрифтах с помощью |
|
Указывает межсимвольный интервал для использования при рисовании текста. (Этот атрибут поддерживается только косвенно Какао.) Для получения дополнительной информации о рисовании текста, посмотрите текстовые Атрибуты. |
|
Указывает, как представить текст. (Этот атрибут поддерживается только косвенно Какао.) Для получения дополнительной информации о рисовании текста, посмотрите текстовые Атрибуты. |
|
Качество интерполяции изображения | Указывает, что процесс раньше интерполировал изображения во время рендеринга. Вы используете |
Указывает, что процесс раньше составлял источник и целевой материал вместе. (Составляющие композит операции, поддерживаемые Какао, связаны с Кварцевыми режимами смешивания, но отличаются по их использованию и поведению.) Вы используете | |
Указывает глобальную альфу (прозрачность) значение для применения в дополнение к альфа-значению для данного цвета. Какао не поддерживает этот атрибут непосредственно. Если Вы хотите установить его, необходимо использовать |
|
Указывает, ли искажение использования путей к ровным линиям, поскольку они пересекают границы пикселей. Вы используете |
Экранные холсты и холсты печати
В широком смысле объекты контекста графики Какао служат двум типам холстов: основанные на экране холсты и основанные на печати холсты. Основанный на экране графический контекст представляет содержание к окну, представлению или изображению с результатами, обычно появляющимися на экране. Основанный на печати графический контекст используется для рендеринга содержания к буферному файлу принтера, файлу PDF, файлу PostScript, файлу EPS или другому носителю, обычно связываемому с системой печати.
Для почти всего основанного на экране и основанного на печати получения Какао обеспечивает надлежащий графический объект контекста автоматически. Какао обеспечивает графический объект контекста во время всех обновлений представления и в ответ на пользователя, распечатывающего документ. Существуют ситуации, однако, где необходимо создать графический объект контекста вручную, включая следующее:
Используя команды OpenGL для рендеринга содержания представления
Рисование к внеэкранному битовому массиву
Создание PDF или данных EPS
Инициирование задания печати программно
Используя методы класса NSGraphicsContext
, можно создать графические объекты контекста для рисования к основанным на экране холстам. Вы не можете использовать эти методы для основанного на печати холста, как бы то ни было. Какао направляет все операции печати через систему печати Какао, обрабатывающую задачу установки графического объекта контекста для Вас. Это означает, что, если Вы хотите генерировать данные PDF, данные EPS или печать к принтеру, необходимо использовать методы NSPrintOperation
класс для создавания рабочего места печати для цели. Это также означает, что Ваши представления должны предоставить некоторую минимальную поддержку печати, если Вы хотите произвести хорошо-отформатированный-вывод для основанных на печати холстов.
Можно определить тип холста, являющегося управляемым текущим графическим контекстом с помощью isDrawingToScreen
метод экземпляра или currentContextDrawingToScreen
метод класса NSGraphicsContext
. Для основанных на печати холстов можно использовать attributes
метод для получения дополнительной информации о холсте, такой как, используется ли это для генерации файла EPS или PDF.
Для получения дополнительной информации о получении контекстов и для основанных на экране и для основанных на печати холстов, посмотрите Создающие Графические Контексты.
Графические контексты и кварц
NSGraphicsContext
класс в Какао является оберткой для Кварцевого контекста графики (CGContextRef
тип данных). Оба типа управляют той же основной информацией, и фактически, много методов NSGraphicsContext
просто вызовите их Кварцевые эквиваленты. Это отношение упрощает выполнять любое Связанное с кварцем получение в Вашем приложении. Это также означает, что любое время у Вас есть контекст графики Какао (экземпляр NSGraphicsContext
класс), у Вас есть Кварцевый контекст графики также.
Для получения информации о том, как использовать контексты графики Какао, чтобы вызвать Кварцевые функции, видеть Используя Кварц в Вашем Приложении.
Изменение текущего состояния графики
В Вашем представлении drawRect:
метод, одна из первых вещей, которые можно хотеть сделать, изменяют текущую среду получения. Например, Вы могли бы хотеть сконфигурировать текущие цвета получения, изменение области отсечения, преобразовать систему координат, и т.д. Много атрибутов могут быть установлены непосредственно с помощью методов NSGraphicsContext
но некоторые требуют использования других объектов. Следующие разделы перечисляют доступные атрибуты получения и как Вы изменяете их.
Выбирание цветов и образцов
Какао предоставляет поддержку для, раскрашивает множество различных цветовых пространств. NSColor
класс поддерживает RGB, CMYK и полутоновые цветовые пространства по умолчанию, но может также поддерживать пробелы пользовательского цвета, определенные профилями ColorSync и ICC. Цвета, которые Вы указываете, включают цветовые каналы, подходящие для цветового пространства и дополнительного альфа-компонента для определения прозрачности цвета.
Для установки текущего штриха или атрибутов заливки создайте NSColor
возразите и отправьте ему a set
, setStroke
, или setFill
сообщение. Штрих и атрибуты заливки определяют цвет или образец для путей и областей, которые они включают. Текущие цвета обводки и цвета заливки влияют на все нарисованное содержание кроме текста, требующего приложения текстовых атрибутов; посмотрите Применение Цвета к тексту.
Для получения дополнительной информации о цветах и как создать их, посмотрите Цвет и Прозрачность.
Установка атрибутов пути
Для изменения значения атрибутов пути Вы используете NSBezierPath
класс. Используя методы этого класса, можно установить ширину строки, стиль соединения строки, стиль тире строки, стиль окончания линии, предельный угол стыка, плоскость, и проветривающий атрибуты правила. Все эти атрибуты влияют на способ, которым пути представляются Какао.
Атрибуты пути прибывают в две разновидности: глобальная переменная и специфичный для пути. Когда Вы используете методы класса в NSBezierPath
для установки значения «по умолчанию» для атрибута Вы устанавливаете глобальный атрибут. Глобальные атрибуты являются глобальной переменной к объектам контуров (в противоположность состоянию графики), таким образом устанавливание глобального атрибута влияет на все пути, Вы представляете использование NSBezierPath
класс, но не влияет на Основанные на кварце пути. Для переопределения глобального атрибута для объекта отдельного тракта необходимо установить специфичное для пути значение. Например, для установки глобальной ширины строки Вы используете setDefaultLineWidth:
метод класса NSBezierPath
. Установить ширину строки для определенного NSBezierPath
объект, Вы используете setLineWidth:
метод экземпляра.
Для получения информации о том, как установить и значение по умолчанию и специфичные для пути атрибуты, и видеть получающееся появление представленного содержания, посмотрите Атрибуты Пути.
Установка текстовых атрибутов
Для большей части основанного на операция со строками получения в Какао Вы применяете текстовые атрибуты непосредственно к строкам, вместо того, чтобы полагаться на глобальные параметры шрифта. Строковые объекты Какао и текстовая система Какао оба поддерживают использование атрибутов для изменения появления строки. Для NSAttributedString
объекты, Вы применяете атрибуты непосредственно к диапазонам символов в строке. Для постоянного клиента NSString
объекты, Вы применяете атрибуты ко всей строке при рисовании ее.
Если Вы хотите установить глобальные параметры шрифта, сохраненные в состоянии графики, возможно для рисования строк с помощью Кварца, можно использовать NSFont
возразите для установки семейства шрифтов и размера. После создания объекта шрифта Вы используете его метод установки применить информацию о шрифтах к текущему состоянию графики.
Для получения дополнительной информации о рисовании опций для текста, см. текст. Для получения дополнительной информации о текстовой системе Какао, посмотрите текстовое Руководство по архитектуре Какао.
Установка составляющих композит опций
При рендеринге каждого визуального элемента необходимо решить, как тот элемент взаимодействует с любым окружающим содержанием. Вы могли бы хотеть, чтобы элемент был разделен на уровни поверх или позади текущего содержания, или быть объединены с ним интересными способами. Вы указываете это поведение с помощью различных опций составления композита.
Составляющие композит опции указывают, как цвета в исходном содержании смешиваются с существующим содержанием в месте назначения получения. С полностью непрозрачными цветами, большинство составляющих композит опций просто маска или различные части наложения источника и целевого содержания. С частично прозрачными цветами, однако, можно достигнуть интересных эффектов наложения.
Опции составления композита Какао отличаются от режимов смешивания, используемых в Кварце, несмотря на то, что эти два выполняют в основном ту же задачу. Опции Cocoa наследованы от среды NextStep, тогда как Кварцевые режимы смешивания являются частью более новой ОСНОВАННОЙ НА PDF модели рендеринга. Несмотря на их историческое наследство, опции Cocoa являются все еще очень мощным способом составить содержание и могут даже быть немного проще понять, чем их Кварцевые дубликаты.
Рисунок 2-1 показывает варианты составления композита Какао и как они влияют на представленное содержание. Наверху числа источник и целевое представляемое содержание. В то время как остальная часть листа непрозрачна, вены листа абсолютно прозрачны. В конечном изображении цвет представляется в частичной непрозрачности. Ниже этого результаты для каждой из поддерживаемых операций составления композита.
Таблица 2-2 перечисляет математические уравнения, используемые для вычислений пиксельных цветов во время составляющих композит операций. В каждом уравнении, R
получающийся (предварительно умноженный) цвет, S
исходный цвет, D
целевой цвет, Sa
альфа-значение исходного цвета, и Da
альфа-значение целевого цвета. Все значения компонента цвета и альфа-значения находятся в диапазоне от 0 до 1 для этих вычислений.
Параграф | Параграф |
---|---|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
Для установки текущей работы составления композита Вы используете setCompositingOperation:
метод NSGraphicsContext
. Если никакой другой оператор не указан, это устанавливает глобальную опцию составления композита использовать. Опция составления композита значения по умолчанию NSCompositeSourceOver
.
Установка области отсечения
Область отсечения является полезным способом ограничить получение определенной частью Вашего представления. Вместо того, чтобы создать сложную графику вне экрана и затем составить их точно в Вашем представлении, можно использовать область отсечения для каширования частей представления, которое Вы не хотите измененный. Например, Вы могли бы использовать область отсечения, чтобы препятствовать тому, чтобы команды рисования дистиллировали, некоторые уже представили содержание. Точно так же Вы могли бы использовать область отсечения для включения определенных частей изображения, которое Вы хотите представить.
Прежде, чем вызвать Ваше представление drawRect:
метод, Какао конфигурирует область отсечения текущего графического контекста для соответствия видимой области представления. Это препятствует тому, чтобы код для прорисовки Вашего представления представил содержание за пределами границ Вашего представления, возможно поверх других представлений.
Можно ограничить drawable область представления еще больше путем добавления форм к текущей области отсечения. Каждый раз, когда Вы добавляете новую форму к текущей области отсечения, Какао определяет пересечение формы с текущей областью отсечения и использует результат в качестве новой области отсечения. Это поведение означает, что необходимо обычно добавлять только одну форму к области клипа прежде, чем сделать получение. Форма, которую Вы добавляете, может быть единственным прямоугольником, многократными прямоугольниками или комбинацией многократных сложных подпутей на сингле NSBezierPath
объект.
Для простых прямоугольных форм самый простой способ отсечь использует NSRectClip
функция. Для указания многократных прямоугольных областей используйте NSRectClipList
функция вместо этого. Для отсечения представления к непрямоугольной области необходимо использовать NSBezierPath
объект. Путь, который Вы создаете, может быть произвольно сложным и включать многократные прямоугольные и непрямоугольные области. Как только у Вас есть путь, Вы хотите, используете объект addClip
метод для добавления получающейся формы к текущей области отсечения. (Для получения информации о том, как создать пути, посмотрите Фундаментальные Формы Получения.)
Рисунок 2-2 показывает эффекты применения траектории отсечения к изображению. Главные изображения показывают изображение, которое будет отсечено и путь для использования для формы клипа, в этом случае состоящей из двух форм в сингле NSBezierPath
объект. Несмотря на то, что форма клипа является тем же в обоих случаях, получающаяся область клипа отличается. Это вызвано тем, что отсечение принимает во внимание правило токовой обмотки при вычислении области отсечения.
Следующий пример показывает Вам, как создать область клипа, показанную на рисунке 2-2. Область клипа составлена из перекрывающегося квадрата и круга, таким образом, Вы просто добавляете прямоугольник и овальный с надлежащими размерами к объекту контуров Безье и вызываете addClip
метод.
// If you plan to do more drawing later, it's a good idea |
// to save the graphics state before clipping. |
[NSGraphicsContext saveGraphicsState]; |
// Create the path and add the shapes |
NSBezierPath* clipPath = [NSBezierPath bezierPath]; |
[clipPath appendBezierPathWithRect:NSMakeRect(0.0, 0.0, 100.0, 100.0)]; |
[clipPath appendBezierPathWithOvalInRect:NSMakeRect(50.0, 50.0, 100.0, 100.0)]; |
// Add the path to the clip shape. |
[clipPath addClip]; |
// Draw the image. |
[NSGraphicsContext restoreGraphicsState]; |
Установка параметров сглаживания
Поддержка контекстов графики какао, сглаживающаяся таким же образом, который делают их Кварцевые дубликаты. Сглаживание является процессом искусственного исправления зубчатого (или искаженный) граничный сопроводительный текст или формы в растровых изображениях. Эти зубчатые края происходят прежде всего в битовых массивах более низкого разрешения, где проще видеть отдельные пиксели. Для удаления зубчатых краев Какао использует различные цвета для пикселей, окружающих схему формы. Цвета, которые это использует, являются смешением исходного пиксельного цвета и цвета схемы формы. Путем смешивания цветов таким образом, края формы кажутся намного более гладкими. Рисунок 2-3 показывает то же изображение, искаженное и сглаженное.
Чтобы включить или отключить сглаживание, используйте setShouldAntialias:
метод NSGraphicsContext
. Даже со сглаживанием отключенного, это может все еще появляться, как будто Какао рисует довольный искажение использования. При рисовании содержания на неграницах пикселей Какао может решить разделить строку по многократным пикселям, которые могут произвести впечатление искажения. Для получения дополнительной информации о том, как избежать этой ситуации, посмотрите Выполнение Точного пикселем Получения.
Создание графических контекстов
Тип привлечения Вас делает в Вашем приложении, определит, необходимо ли создать какие-либо графические объекты контекста явно или просто использовать одно Какао, предоставляет Вам. Если все, что Вы делаете, является получением в Ваших представлениях, можно, вероятно, просто использовать Предоставленный какао контекст. Это - истина и для основанного на экране и основанного на печати получения. Если Ваше приложение выполняет какой-либо другой тип получения, однако, Вы, возможно, должны создать графический контекст сами.
Следующие разделы предоставляют информацию о том, как и когда создать контексты графики Какао для Вашего содержания.
Создание основанного на экране контекста
Если Вы хотите сделать какое-либо получение за пределами нормального цикла обновления Вашего представления, необходимо создать графический объект контекста явно. Вы могли бы использовать этот метод, чтобы нарисовать во внеэкранном окне или битовом массиве и затем скопировать получающиеся биты в другом месте. Вы могли также использовать его для рисования к окну из вторичного потока. NSGraphicsContext
класс включает методы для создания новых графических объектов контекста в частности для окон и растровых изображений.
Для рисования к окну можно использовать graphicsContextWithWindow:
метод NSGraphicsContext
. Контекст, который Вы возвращаете, инициализируется к самому окну, а не к определенному представлению. Фактически, если окно содержит много подпредставлений, Вы не можете хотеть использовать этот метод. Для рисования представлений должным образом, необходимо было бы обойти список подпредставлений вручную и сконфигурировать среду получения для каждого, который не рекомендуется. Вместо этого Вы использовали бы этот метод для рисования к внеэкранному буферу.
Для рисования к битовому массиву у Вас есть две опции. Если Ваш код работает в OS X v10.4 и позже, можно использовать graphicsContextWithBitmapImageRep:
метод для создания объекта контекста фокусировался на NSBitmapImageRep
объект. Получение, которое Вы делаете, тогда представляется непосредственно к битовому массиву. Если Ваш код должен работать на более ранних версиях OS X, необходимо или заблокировать внимание на представление или использовать внеэкранное окно и затем получить содержание представления или окна. Для получения информации и примеры того, как создать битовые массивы, посмотрите Создание Битового массива
Создание PDF или контекста PostScript
В отличие от основанных на экране контекстов, если Вы хотите создать графический контекст для PDF, EPS или основанного на печати холста, Вы не делаете так непосредственно. Все основанные на печати операции должны пройти через систему печати Какао, обрабатывающую работу, требуемую для установки печатных страниц и выполнения задания печати.
Самый простой способ создать PDF или файл EPS состоит в том, чтобы использовать dataWithPDFInsideRect:
и dataWithEPSInsideRect:
методы NSView
. Эти методы конфигурируют задание печати автоматически и используют существующий код для прорисовки Вашего представления для генерации данных EPS или PDF. Для получения дополнительной информации и пример того, как использовать эти методы, посмотрите Создание Представление изображения EPS или PDF.
Для создавания рабочего места печати вручную Вы используете NSPrintOperation
класс. Этот класс предлагает несколько методов класса для того, чтобы создать рабочие места печати для определенного представления и вывести задание к принтеру, файлу PDF или файлу EPS. Как только у Вас есть экземпляр NSPrintOperation
класс, можно установить информацию о печати и использовать runOperation
метод для запуска задания печати, в котором вступает во владение Какао точки.
Во время выполнения задания печати Какао вызывает несколько методов Вашего представления для обработки макета страницы и получения. Эти методы вызывают для всех путей печати, так реализация их для печати будет также поддерживать PDF и EPS. Для получения информации о том, как реализовать эти методы, см. Руководство по программированию Печати для Mac.
Поточная обработка и графические контексты
Набор Приложения поддерживает уникальный графический контекст для каждого окна и комбинации потока. Поскольку каждый поток имеет свой собственный графический объект контекста для данного окна, возможно использовать вторичные потоки для рисования к тому окну. Существуют некоторые протесты, как бы то ни было.
Во время нормального цикла обновления для окон все запросы получения отправлены к основному потоку Вашего приложения для обработки. Когда пользовательское событие инициировало изменение в Вашем пользовательском интерфейсе, нормальный цикл обновления происходит. В этой ситуации Вы вызвали бы setNeedsDisplay:
или setNeedsDisplayInRect:
метод (или display
семья методов) от основного потока Вашего приложения для лишения законной силы частей представления, требующих перерисовки. Вы не должны вызывать эти методы ни от каких вторичных потоков.
Если Вы хотите обновить окно или представление от вторичного потока, необходимо вручную заблокировать внимание на окно или просмотреть и инициировать получение сами. Блокировка фокуса конфигурирует среду получения для графического контекста того окна. После того, как заблокированный, можно сконфигурировать среду получения, выпустить команды рисования, как обычно, и затем сбросить содержание графического контекста к буферу окна.
Для рисования регулярно на вторичном потоке, необходимо уведомить поток сами. Самый простой способ отправить регулярные уведомления использует NSTimer
или NSAnimation
объект. Для получения дополнительной информации о том, как анимировать содержание, посмотрите Усовершенствованные Методы Получения.
Создание битовых массивов на вторичных потоках является одним способом распараллелить Ваш код для прорисовки. Поскольку битовые массивы являются автономными объектами, они могут быть созданы безопасно на вторичных потоках. От Вашего потока необходимо было бы создать графический объект контекста явно (как описано в Создании Основанного на экране Контекста) и затем издать приказы получения для вовлечения растрового буфера. Для получения дополнительной информации о том, как создать битовые массивы, включая пример кода, посмотрите Создание Битового массива.