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