-[CALayer setNeedsDisplayInRect:] вызывает перерисовку всего слоя

Я создаю подкласс CALayer, чтобы предоставить свой собственный метод рисования. Для оптимизации я вызываю -[MyLayer setNeedsDisplayInRect:]вместо -[MyLayer setNeedsDisplay]. В методе рисования я получаю прямоугольник, который нужно перерисовать с помощью CGContextGetClipBoundingBox().

Если я использую этот слой в качестве базовогослоя UIView, все работает, как и ожидалось. Проблема возникает, как только я использую свой пользовательский слой в качестве подслоя другого CALayer. Чем CGContextGetClipBoundingBox()всегда возвращает прямоугольник границ этого слоя.

Есть идеи?

[EDIT]

Кажется, нет никакой гарантии, что содержимое CALayer кэшируется и перерисовывается только грязная часть. Я провел небольшой тест и сохранил прямоугольник, который нужно отображать, как отдельное свойство. В результате на экране была видна только эта часть.

Теперь я выполню рендеринг в контексте изображения и сохраню это изображение в качестве кеша. В методе рисования я буду отображать только кешированное изображение.

8
задан Tobias Kräntzer 24 March 2012 в 09:52
поделиться