Статический фон для CGContext - PullRequest
4 голосов
/ 14 июля 2011

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

Я использую CGContext , чтобы рисовать различные слои графического представления живых данных, которые должны обновляться с разумной частотой кадров не менее 50 кадров в секунду. Я хочу использовать статическое изображение в качестве фона. Перерисовка этого изображения с использованием контекста для каждого цикла значительно замедляет частоту кадров. Я думал об использовании UIImageView для отображения изображения один раз. Проблема здесь в том, что я хочу использовать режимы наложения, предоставляемые CGContext , чтобы добиться более сложных наложений, чем просто установка альфа-значения для каждого слоя. Поскольку UIImageView , отображающий фоновое изображение, не является частью контекста, на него не влияют режимы наложения. У кого-нибудь есть идеи, как добиться желаемого поведения, не слишком сильно влияя на частоту кадров? Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 15 июля 2011

Быстрый вызов CGContextDrawImage с CGImageRef с такими же размерами, что и у CGRect. Установите CGImageRef с фоновым изображением в коде, который запускается реже, чем каждый кадр, такой как код инициализации представления. Если это фоновое изображение меняется, создайте изображение в коде программы, а не в коде обновления рисования.

Худшее, что вы можете сделать, - это каждый раз получать доступ к изображению из файла. Некоторое время можно сэкономить, не обращаясь к CGImageRef из более тяжелого объекта. Вызов типа [someUIImageObject CGImage] добавит накладные расходы при отправке сообщения, тогда как доступ к ivar типа CGImageRef в том же объекте, содержащем код чертежа, не будет.

Если исходное изображение имеет неправильный размер, сначала нарисуйте его в CGImageRef нужного размера один раз и повторно используйте в своем коде рисования.

...