2012-06-04 3 views
1

В моем приложении для iPhone мне нужно показать большое количество (макс. 150) маленьких точек размером 10x10 пикселей, которые перемещаются по экрану индивидуально. Им не нужно двигаться плавно никоим образом, но их нужно обновлять каждую секунду или около того. В настоящее время у меня это реализовано как единственный CALayer, который я перерисовываю каждую секунду.Эффективность CALayer и сколько лимит

Но я понимаю, что CALayers очень эффективны, потому что они сопоставлены с оборудованием GPU. Поэтому я задавался вопросом, было бы более эффективным (с точки зрения использования батареи) создавать отдельный CALayer для каждой точки и перемещать его, задавая свои свойства позиции.

Так что мне интересно, есть ли у вас опыт в этом. CPU будет меньше, но GPU больше. Сколько CALayers все еще может обрабатываться оборудованием GPU?

Если я сделаю их отдельными CALayers, я мог бы также легко анимировать их, что выглядело бы намного лучше. Будет ли это намного более энергоемким?

Что еще хуже в моем случае, так это то, что я в настоящее время использую для них CATiledLayer с максимум 4-мя плитами, которые выставлены. Это также означает, что мне нужно перерисовать их 4 раза каждое обновление.

ответ

2

есть. Я встретил аналогичную проблему, как и вы. В моем случае я рисовал 80 баррелей на гистограмме. Раньше мы использовали UIView (с его реализацией drawRect) для каждого стояка, а позже я решил использовать CALayer (без реализации drawLayerInContext) для каждого из них для анимации. с номером бара как 80, я нашел 1. Метод UIView потребляет больше памяти (поскольку он запрашивает cgcontext в drawRect). 2. Метод UIView лучше реагирует на анимацию. В моем случае UIVE FPS составляет около 60, но CALayer составляет около 34.

Позже я попробовал корпус с меньшим номером бара (40, 30 и т. Д.), У GPU меньше стресса, и я могу получить удовлетворенный номер FPS из анимации CALayer.

Что я хочу упомянуть здесь, когда вы переключаетесь на «один слой на точку», вам нужно проверить, не слишком ли гладко, как раньше.

+0

Спасибо за ваш ответ @Semix. Я удивлен, что у вас хуже производительность с CALayer, чем с UIView, учитывая, что UIView поддерживаются CALayers. Правильно ли вы устанавливаете образ CALayer, а затем анимируете его положение? Вы использовали собственную анимацию CALayer или задали ее положение в каждом кадре? – fishinear

Смежные вопросы