Что за магия стоит за CAReplicatorLayer?

Что я нахожу интересным с CAReplicatorLayer:

  • Он может отображать CALayer несколько раз с различными преобразованиями очень эффективно (как?)
  • Кажется, что он каким-то образом использует "резервное хранилище" для реплицированного слоя и даже применяет к нему некоторые цветовые оттенки (как?)

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

Так что спросили совершенно по-другому: возможно ли получить "резервное хранилище" для CALayer и отобразить его так, как я хочу столько раз, сколько захочу?

(Под "резервным хранилищем" я подразумеваю визуализированную текстуру для CALayer/UIView. Я не знаю много о том, что происходит под капотами CoreAnimation/QuartzCore).


Почему я не смотрю на альтернативы, такие как, например, рендеринг CALayer в UIImage:

  • Спектакль
  • Контент динамический / меняется довольно часто при переходах
  • Было бы здорово сделать это по-другому!

1 ответ

Решение

Специальные CALayers, такие как CAReplicatorLayer или CAGradientLayer, могут (через частные API) выполнять рисование непосредственно на GPU, используя быстрое заполнение или копирование. В некотором смысле они отличаются тем, что резервное хранилище находится не в обычном ОЗУ, а непосредственно в графическом процессоре.

Другие вопросы по тегам