Кэширование в CGLayer медленнее, чем перерисовка на iPhone

StackOverflow https://stackoverflow.com/questions/3229784

Вопрос

Я работаю над простой программой рисования для iPhone.На данный момент события касания добавляют свое местоположение в список, который связан с группой вызовов CGContextAddLineToPoint, которые перерисовываются при каждом вызове drawRect.

У меня возникают проблемы с производительностью при довольно небольшом количестве строк (хотя они прозрачны), поэтому я попытался нарисовать все в CGLayer.Теперь вместо рисования каждой линии в каждом кадре каждая линия рисуется только один раз, а CGLayer выводится на экран в каждом кадре.

        CGContextRef backgroundContext = CGLayerGetContext(pathBuffer);
        CGContextSetLineWidth(backgroundContext, 2.0);
        CGContextSetLineCap(backgroundContext, kCGLineCapButt);
        CGContextSetStrokeColorWithColor(backgroundContext, [pathColor CGColor]);

        if([[touchPoints objectAtIndex:0] continuesToNextPoint])
        {
            CGContextMoveToPoint(backgroundContext, [[touchPoints objectAtIndex:0] point].x, [[touchPoints objectAtIndex:0] point].y);
            CGContextAddLineToPoint(backgroundContext, [[touchPoints objectAtIndex:1] point].x, [[touchPoints objectAtIndex:1] point].y);
            CGContextStrokePath(backgroundContext);
        }

        //remove it from touchpoints
        [touchPoints removeObjectAtIndex:0];
    }

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawLayerAtPoint(context, CGPointMake(0, 0), pathBuffer);

Во всяком случае, это МЕДЛЕННЕЕ, чем то, что я делал раньше.Я делаю что-то неправильно?Будет ли мне лучше нарисовать UIImage или что-то в этом роде?Спасибо.

Это было полезно?

Решение

Что вам следует сделать, это вставить CALayer в одно из ваших представлений, обновляя слой, а затем вызывая setNeedsDisplayInRect: с границами области, которая изменилась на слое, что приводит к ее обновлению.Если вы попытаетесь обновить весь экран, это будет медленно.

Используете ли вы инструменты, чтобы определить, какие части медленные?Я рекомендую использовать его, чтобы узнать, какие части вас замедляют.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top