Я не могу понять, почему вы не сможете скопировать слой. Истинный слой является «неотъемлемой частью» UIView. Но, в конце концов, это просто еще один объект с несколькими свойствами.
На самом деле есть метод для CALayer, который называется:
- (id)initWithLayer:(id)layer
Но оно не предназначено для копирования слоя. (Вы можете прочитать документы Apple по причинам, почему)
CALayer не соответствует NSCopying, поэтому у вас есть два варианта:
- Подкласс это и реализовать
«copyWithZone:» (и соответствует
NSCopying)
- Напишите метод / функцию, которая будет
вернуть «копию» CALayer
Независимо от того, какой путь вы выберете, вы должны задать вопрос: какие свойства CALlayer вы хотите скопировать?
Допустим, вы хотите скопировать только содержимое и фрейм:
CALayer copyLayer = [CALayer layer];
copyLayer.contents = theLayerToBeCopied.contents;
copyLayer.frame = theLayerToBeCopied.frame;
return copyLayer;
Вы можете пройти и скопировать каждое свойство слоя или просто скопировать те, которые вам нужны. Может быть хорошим методом для размещения в категории CALayer.