2016-08-22 4 views
0

я могу успешно создать и использовать контекст Core Graphics растрового для фона рисунка следующим образом:Управления IOS основных графические растровые контекстов в стеке

  • вызова UIGraphicsBeginImageContextWithOptions() создать новое растровое изображение и сделать его текущий контекст
  • сделать некоторый контент с помощью CG API
  • периодически говорят мой взгляд звонить UIGraphicsGetImageFromCurrentImageContext() вне drawRect() и setNeedsDisplay(), то внутри drawRect() я рисую изображение в поле зрения
  • , наконец, вызовите UIGraphicsEndImageContext(), чтобы убрать растровое изображение и удалить его из верхней части стека.

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

Сначала я думал, что я мог бы просто использовать UIGraphicsPushContext() и UIGraphicsPopContext(), но останавливает контекст растрового изображения работает, и в самом деле UIKit Functions Reference говорит, что вы не должны делать это:

[...] Розыгрыш среда сразу попадает в стек контекста графики.

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

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

Любые идеи ...? Это не проблема как таковая, но я хотел бы знать, если я что-то пропустил здесь ...

+0

Возможно, путь вокруг этого заключается в создании изображения с использованием вызовов Core Graphics (что-то я еще не понимаю, как это сделать) –

ответ

0

Как указано в документации разработчика Apple, невозможно удалить UIGraphicsImageContext из контекстного стека.

Если вам нужно манипулировать двумя растровыми контекстами параллельно (или от основного потока), то этого можно добиться, создав и обработав их, используя вызовы Core Graphics API. Это немного сложнее, чем использование API UIGraphics и требует, чтобы вы управляли масштабированием между пикселями и отображаемыми точками, но это вполне уместно.

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

  • Нет связанных вопросов^_^