Различия в производительности iPhone при рисовании кварца и предварительно запеченных изображений (что, я думаю, упрощает сравнение с кварцем и кварцем)

StackOverflow https://stackoverflow.com/questions/1604341

Вопрос

Новичок в Quartz, и мне любопытно узнать скорость рисования простых фигур, градиентов и теней; специально сравнивая функции рисования Quartz с рисованием изображений Quartz на iPhone.

Скажите, что мне нужно нарисовать закрашенный прямоугольник с штрихами и тенями. Я предполагаю, что импорт предварительно запеченного прямоугольника в виде PNG и рисование его с использованием drawInRect: или drawAtPoint: быстрее, чем использование функций рисования Quartz для рисования того же самого, поскольку последний требует явных вычислений. С другой стороны, рисование изображения, которое я предполагаю, увеличивает использование памяти и размер приложения, поскольку мне нужно импортировать изображение и затем выделить его. Это звучит правильно?

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

Это было полезно?

Решение

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

Одна из областей, где я увидел значительный выигрыш в производительности, - большой радиальный градиент, который я рисую в качестве фона. В Shark я мог видеть, что вызов CGContextDrawRadialGradient () отнимает много процессорного времени. Когда я заменил нарисованный кварцем радиальный градиент статическим изображением, я увидел заметное сокращение времени запуска приложения (этот фон помещается во время запуска приложения). Как ни странно, я также увидел сокращение использования памяти приложения примерно на 0,5 МБ, что я не могу полностью объяснить.

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

Другие советы

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

Итак, скажем, когда планшет наконец выйдет (в любой день !!), вы можете немного переделать параметры рисования, чтобы охватить все возможные устройства, вместо того, чтобы генерировать кучу разных статических изображений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top