оптимизация метода CGLayer drawRect - PullRequest
0 голосов
/ 03 мая 2009

В настоящее время я использую CGContextDrawLayerInRect для рисования CGLayer в drawRect. Это называется довольно часто. Есть ли способ уменьшить накладные расходы, рисуя только ту часть CGLayer, которая изменилась, а не весь CGLayer в drawRect?

-(void)drawRect:(CGRect)rect {
    CGContextRef currentContext = UIGraphicsGetCurrentContext();
    CGContextDrawLayerInRect(currentContext, [self bounds], _backgroundLayer);
}

Ответы [ 3 ]

0 голосов
/ 03 мая 2009

Я думаю, что это в значительной степени оптимизировано. Возможно ли будет вызывать setNeedsDisplay реже, может быть? Если это слишком медленно для вас, ваша следующая лучшая ставка - использовать OpenGL!

0 голосов
/ 11 января 2011

Возможно, попробуйте полностью исключить -drawRect:. Нарисуйте в UIImageView или CALayer и позвольте ему справиться с этим.

0 голосов
/ 03 мая 2009

Параметр rect описывает область, которую необходимо перерисовать. Кроме того, чтобы ограничить объем перерисовки, нет. Когда вызывается drawrect, вы не представляете, что система сделала с вашим слоем - например, вы можете предварительно преобразовать весь вид в новый контекст для системной анимации.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...