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

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

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

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

Ответы [ 2 ]

9 голосов
/ 22 октября 2009

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

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

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

0 голосов
/ 22 октября 2009

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

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

...