Animar uma propriedade de camada que simplesmente altera outras propriedades?

Imagine umCAGradientLayer.

É muito fácil animar.startPoint e.endPoint.

Agora imagine um carro alegóricospinLike que simplesmentedefine os dois de uma só vez.

{Então, em vez de ter duas animações diferentes, você pode simplesmente animarspinLike.}

Então, algo como ..

class CustomGradientLayer: CAGradientLayer {

    @objc var spinLike: CGFloat = 0 {

        didSet {

            startPoint = CGPoint( ... )
            endPoint = CGPoint( ... )
            setNeedsDisplay()
        }
    }
}

Para animarspinLike...

class Test: UIView {

     ...
     g = CustomGradientLayer()
     a = CABasicAnimation(keyPath: "spinLike")
     ...
     g.add(a, forKey: nil)
     ...

Mas.

Não funcionastartPoint eendPoint não são movidos.

O que está errado?

Nota - tragicamente parece que você não pode@NSManaged uma propriedade que possui um didSet ...

Nota - é fácil o suficiente para fazer o seu próprioanimação personalizada por apenassubstituindo o loop de desenho.

Existem muitos exemplos disso por aí. É assim que se faz:

class CircleProgressLayer: CALayer {

    @NSManaged var progress: CGFloat

    override class func needsDisplayForKey(key: String) -> Bool {

        if key == "progress" {
            return true
        }
        return super.needsDisplayForKey(key)
    }

    override func draw(in ctx: CGContext) {

        path.fill() etc etc... your usual drawing code
    }
}

Infelizmente minha pergunta aqui é

Não relacionado ao desenho real:

Animando a propriedadespinLike,

Eu simplesmente quero alterar as propriedades animadas comuns comuns de cada quadro (no exemplo,.startPoint e.endPoint )

Como você faz isso?

Nota! Você não pode mudar.startPoint e.endPoint nodrawInContext - você seriaattempting to modify read-only layer

questionAnswers(1)

yourAnswerToTheQuestion