Проблема с UIGraphicsPopContext () ...? - PullRequest
2 голосов
/ 04 марта 2011

Я потратил всю ночь, чтобы решить эту проблему, но я все еще злюсь на это

здесь картинка с моим кодом: http://i284.photobucket.com/albums/ll15/hisinhvien/Screenshot2011-03-03at112716PM.png (Извините, новый пользователь не может опубликовать изображение)

сначала я переопределил «drawRect» моего «@interface Component: UIView», затем я поместил в него некоторый код для тестирования графического контекста push и pop, но он не сработал, следуя рисунку: первый Iвыбрал зеленый цвет, затем я нажал на контекст и выбрал синий цвет, а затем нарисовал прямоугольник, после чего я выдал контекст, но последний прямоугольник все еще будет синим ...?

вот мой исходный код: http://www.mediafire.com/?aakgqw92flc808o Это очень просто, но ошибся ... @@

Ответы [ 2 ]

5 голосов
/ 04 марта 2011

Использование CGContextSaveGState и CGContextRestoreGState .

Цитата документации о том, что было сохранено:

Обсуждение

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

  • CTM (текущая матрица преобразования)
  • область клипа
  • качество интерполяции изображения
  • ширина линии
  • объединение строк
  • ограничение митры
  • ограничение строки
  • штрих строки
  • плоскостность
  • в случае сглаживания
  • намерение рендеринга
  • заполнение цветового пространства
  • цветное пространство обводки
  • цвет заливки
  • цвет обводки
  • альфа-значение
  • шрифт
  • размер шрифта
  • межсимвольный интервал
  • режим рисования текста
  • параметры тени
  • фаза шаблона
  • параметр сглаживания шрифта
  • режим наложения

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

0 голосов
/ 11 февраля 2012

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

Итак, чтобы было ясно, когда вызывается drawRect, UIGraphicsGetCurrentContext () возвращает контекст вашего представления.Если у вас есть другой контекст, в который вы хотите рисовать, вы вызываете UIGraphicsPushContext (imageContext).Теперь UIGraphicsGetCurrentContext () возвращает ваш другой контекст, что означает, что любой код рисования, который вы всегда рисуете в текущем контексте, будет в этом случае рисовать в imageContext.Когда вы вызываете UIGraphicsPopContext (), UIGraphicsGetCurrentContext () снова возвращает контекст вашего представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...