Почему оригинальный слой теряет свою маску при копировании? - PullRequest
0 голосов
/ 30 декабря 2018

Когда я пытаюсь скопировать объект из созданного мной пользовательского класса слоя, созданная копия совпадает с оригиналом, но оригинал теряет свою маску.

Чтобы выполнить копирование, я создалрасширение моего пользовательского класса:

extension CustomLayer: NSCopying {

    func copy(with zone: NSZone? = nil) -> Any {
        let clone = CustomLayer()

        // Type Properties
        clone.colorFill             = self.colorFill
        clone.colorMap              = self.colorMap
        clone.radius                = self.radius

        // LayerProperties
        clone.frame                 = self.frame
        clone.cornerRadius          = self.cornerRadius
        clone.opacity               = self.opacity
        clone.position              = self.position

        clone.shadowRadius          = self.shadowRadius
        clone.shadowColor           = self.shadowColor
        clone.shadowOffset          = self.shadowOffset
        clone.shadowOpacity         = self.shadowOpacity
        clone.shadowPath            = self.shadowPath 

        clone.mask                  = self.mask

        return clone
    }
}

Затем я создаю копию следующим образом:

let originalLayer = CustomLayer()
...
view.layer.addSublayer(originalLayer)

let copyLayer = originalLayer.copy() as! CustomLayer
view.layer.addSublayer(copyLayer)

Как вы можете видеть на скриншоте, исходный слой больше не имеет маски, хотякопия есть.

Top: original layer / Bottom: copy layer

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

Любые указатели будут с благодарностью!

Заранее спасибо за ваше время!

1 Ответ

0 голосов
/ 30 декабря 2018

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

Можно ли использовать один CALayer в качестве маски для нескольких других слоев?

...