Кэширование кварца в CALayer - PullRequest
1 голос
/ 13 февраля 2011

Я пытаюсь настроить процесс игры, в которой используется Кварц, чтобы рисовать умеренное количество спрайтов, около 50, во время каждого игрового цикла (40 кадров в секунду).

В настоящее время у меня есть очень простой механизм рисования, в котором один игровой вид (UIView) перебирает все активные спрайты и просит каждого из них визуализировать себя в CGContext (тот из вида). Это работает нормально, но производительность начинает падать с более чем 50 активными объектами, и я бы очень хотел изменить настройки.

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

Я изо всех сил пытаюсь понять, как я этого добиваюсь. Где именно я изначально рисую? У меня нет CGContext, когда мой спрайт инициализирован. Является ли правильный подход для рендеринга CGImage в качестве буфера, а затем установить его в качестве содержимого на CALayer?

1 Ответ

1 голос
/ 13 февраля 2011

Просто подкласс CALayer и сделайте свой рисунок в drawInContext:.Затем слой автоматически кеширует свое содержимое.Если вы не хотите создавать подкласс CALayer, вы также можете назначить ему делегата (который не должен быть UIView) и реализовать drawLayer:inContext:.

...