Проблемы с производительностью при масштабировании нескольких клиентских уровней

У меня есть два подкласса CALayer, каждый со своим собственным drawLayer: (CALayer *), слой inContext: (CGContextRef) делегат ctx. Они оба являются простыми слоями (некоторые одноцветные фигуры, нарисованные с помощью компьютерной графики), но мне нужно масштабировать около 12 экземпляров одновременно, и у меня возникают некоторые проблемы с частотой кадров. Я пометил все слои как непрозрачные, чтобы попытаться освободить некоторые циклы, и попытался использовать неявные и явные базовые анимации (в самом свойстве bounds), а также назначить матрицы CA3DTransform свойству преобразования.

Кто-нибудь знает хороший способ быстро изменить размер объектов при сохранении хорошей частоты кадров?


person Alex    schedule 09.05.2009    source источник


Ответы (2)


Похоже, это не выходит за рамки возможностей iPhone.

Одним из решений может быть рендеринг их в изображение и масштабирование? Это (более или менее) то, что сделает CoreAnimation. Похоже, у вас есть дефект - возможно, вам стоит опубликовать свой код, и люди смогут его просмотреть.

Где вы выполняете перерисовку и что перерисовываете?

person Rog    schedule 09.05.2009

Я согласен с Роджером.

Проверьте, как часто вызываются ваши drawLayer:inContext: методы (или все, что вы используете для рисования). Это может сделать простой NSLog. Если они вызываются постоянно, рассмотрите идею Роджера о рендеринге изображения и его масштабировании.

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

person amattn    schedule 10.05.2009