Рисование избыточного изображения с помощью CGContextDrawImage - PullRequest
1 голос
/ 23 декабря 2011

У меня есть одно изображение, которое я хочу многократно перерисовывать по экрану, однако существует большое количество перерисовок в секунду, и рисование изображения каждый раз приводит к огромному снижению производительности приложения. Есть ли способ как-то кэшировать CGImageRef или что-то, что заставит CGContextDrawImage работать быстрее?

Ответы [ 2 ]

1 голос
/ 26 апреля 2013

CGLayerRef должен быть тем, что вам нужно.

Из документов Apple:

Слои подходят для следующих целей:

Высококачественная закадровая отрисовка чертежа, который вы планируете использовать повторно.

  • Например, вы, возможно, строите сцену и планируете использовать один и тот же фон.Нарисуйте фоновую сцену на слой, а затем нарисуйте слой, когда вам это нужно.Еще одно преимущество заключается в том, что вам не нужно знать цветовое пространство или информацию, зависящую от устройства, чтобы рисовать на слое.
  • Повторное рисование.Например, вы можете создать шаблон, состоящий из одного и того же элемента, нарисованного снова и снова.Нарисуйте элемент на слое, а затем несколько раз нарисуйте слой, как показано на рисунке 12-1.Любой объект Quartz, который вы рисуете неоднократно, включая объекты CGPath, CGShading и CGPDFPage, выигрывает от повышения производительности, если вы рисуете его в CGLayer.Обратите внимание, что слой предназначен не только для рисования на экране;Вы можете использовать его для графических контекстов, которые не ориентированы на экран, например, для графического контекста PDF.

https://developer.apple.com/library/mac/#documentation/graphicsimaging/Conceptual/drawingwithquartz2d/dq_layers/dq_layers.html#//apple_ref/doc/uid/TP30001066-CH219-TPXREF101

1 голос
/ 23 декабря 2011

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

Если это для игры, вы должны просто использовать игровой движок (Unity, Cocos2D и т. Д.). Они уже потратили много времени на то, чтобы понять, как сделать это быстро.

...