Я делаю CALayer на подклассы, чтобы предоставить свой собственный метод рисования.Для оптимизации я звоню -[MyLayer setNeedsDisplayInRect:]
вместо -[MyLayer setNeedsDisplay]
.В методе рисования я получаю прямоугольник, который должен быть перерисован с помощью CGContextGetClipBoundingBox()
.
. Если я использую этот слой в качестве слоя base UIView, все работает должным образом.Проблема возникает, как только я использую свой пользовательский слой в качестве подслоя другого CALayer.Чем CGContextGetClipBoundingBox()
всегда возвращает прямоугольник границ этого слоя.
Любые идеи?
[EDIT]
Кажется, что нет никакой гарантии, чтосодержимое CALayer кэшируется и перерисовывается только грязная часть.Я сделал небольшой тест и сохранил прямоугольник, который должен отображаться как отдельное свойство.В результате на экране была видна только эта часть.
Теперь я буду рендерить в контекст изображения и сохраню это изображение в качестве кэша.В методе рисования я буду отображать только кэшированное изображение.