Более быстрая графика для iPhone - PullRequest
0 голосов
/ 05 марта 2012

Мне нужно создать проект, в котором я нарисую на экране некоторую графику с примерно 25 отдельными полосами, я сделал это с помощью UIView, но, к сожалению, не все устройства могут справиться с этой работой, потому что существует матрица 25x25 квадраты UIViews, они обновляют свой цвет и альфа-канал за 0,04 секунды, и на самом деле для его рисования требуется много памяти, может кто-нибудь помочь с какой-либо целью, как все это можно сделать быстрее для управления памятью, и если можно управлять его компонентами, такими как альфа или цвет фона для объекта. Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 05 марта 2012

Я понимаю, что вы используете 25 подпредставлений для каждого бара.Вы уже можете оптимизировать это и сделать каждый бар одним UIView.Вы можете создать собственный подкласс UIView, который мы будем называть BarView, и переопределить его метод drawRect, чтобы нарисовать 25 квадратов бара.

Редактировать

Предполагается, что у вас есть массив bars, который содержит 25 баров (типа Bar).Каждый столбец содержит массив squares из 25 квадратов (типа Square).

- (void)drawRect:(CGRect)rect
{
    CGContextRef *ctx = UIGraphicsGetCurrentContext();
    for (Bar *bar in self.bars) {
        for (Square *square in bar.squares) {
            CGContextSetFillColorWithColor(ctx, square.color.CGColor);
            CGContextFillRect(ctx, square.frame);
        }
    }
}

Bar и Square не подкласс UIView, они простые NSObject s.

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

1 голос
/ 05 марта 2012

Перейти на OpenGL.Он также имеет очень эффективный механизм 2D-рисования.

1 голос
/ 05 марта 2012

Возможно, вы захотите переключиться на метод рисования на основе базовой анимации, предложенный в в этом ответе . Идея состоит в том, чтобы нарисовать как можно меньше вещей, используя Core Graphics. Вместо этого вы создаете слои для всех ваших независимо анимируемых графических элементов и свойств слоев анимации.

Для рисования баров вы можете создать слой и установить его свойства backgroundColor и bounds / center для анимации его размера и внешнего вида.

...