Могу ли я заставить CALayer использовать setNeedsDisplayInRect: вместо setNeedsDisplay для пользовательского свойства - PullRequest
0 голосов
/ 08 марта 2012

У меня есть пользовательское свойство, и я переопределяю +needsDisplayForKey:, чтобы вернуть YES для этого свойства.Мой метод -drawInContext: довольно сложный, в то время как прямоугольник, на который влияет мое пользовательское свойство, довольно мал.Я хотел бы оптимизировать его.

Решение, о котором я думаю, состоит в том, чтобы реализовать пользовательский установщик, в котором я буду явно отмечать соответствующий прямоугольник для отображения.В одном я не уверен, что такая реализация будет равна оригинальной и будет обрабатывать неявную анимацию. (rdar: // 11008555)

Будет ли оно равным или есть лучшее решение?(Целевые платформы 10,6+)

1 Ответ

0 голосов
/ 08 марта 2012

Нет возможности рисовать на части CALayer.Базовые анимационные слои реализованы в виде текстур на поверхностях OpenGL.Когда вы реализуете пользовательское рисование, по сути дела, ваши команды рисования используются для создания растрового изображения, а затем это растровое изображение устанавливается в качестве текстуры для поверхности OpenGL CALayer.управляйте кэшем растрового изображения (используя NSImage или CGContext) для слоя самостоятельно.Таким образом, вы можете просто изменить часть растрового изображения, которая требует перерисовки, а затем нарисовать изображение на слое, используя setContents:.

...