我有一个包含基本形状的CAShapeLayer,该形状是在“drawRect”方法期间创建的,可以在下面看到。
override func drawRect(frame: CGRect)
{
let rectangleRect = CGRectMake(frame.minX + 2.5, frame.minY + 2.5, frame.width - 5, frame.height - 5)
let rectanglePath = UIBezierPath(roundedRect: rectangleRect, cornerRadius: 4)
shapeLayer.path = rectanglePath.CGPath
if (self.active == true)
{
shapeLayer.fillColor = selectedColor.CGColor
} else
{
shapeLayer.fillColor = buttonColor.CGColor
}
shapeLayer.strokeColor = buttonOutlineColor.CGColor
shapeLayer.lineWidth = 5.0
self.layer.addSublayer(shapeLayer)
}
我用它来创建一个带有笔触的简单正方形。然后,我有另一种方法,它具有
CAShapeLayer
的动画。但是,调用该方法时,CAShapeLayer
上没有任何更改。动画方法如下所示。let animation = CABasicAnimation(keyPath: "strokeColor")
animation.duration = 0.5
animation.repeatCount = 10
animation.fromValue = UIColor.whiteColor()
animation.toValue = UIColor.redColor()
animation.autoreverses = true
shapeLayer.addAnimation(animation, forKey: "strokeColor")
变量
shapeLayer
已在类的顶部定义。我对为什么这不起作用非常感兴趣。任何有关如何解决此问题的建议将不胜感激! 最佳答案
每当我使用Quartz / CoreGraphics时,这个问题都会困扰我。 fromValue和toValue需要CGColor
参数,而不是UIColor
。
只需对其进行更改,使其成为UIColor.whiteColor().CGColor
和UIColor.redColor().CGColor
通常,如果使用前缀CA
或CG
,则将要使用CGColor
等。
关于ios - CAShapeLayer未在动画中更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34619489/