我试图每隔20ms将一次CAShapelayer添加到给定的x和y坐标。我希望这个形状会在一秒钟之内消失(就像一个示踪剂)。我创建的功能有效,形状在正确的位置创建并消失。但是我在屏幕上留下了额外的形状。
func shadowBall (x: CGFloat, y: CGFloat){
let xpos : CGFloat = ((self.frame.width/2) + x)
let ypos : CGFloat = ((self.frame.height/2) + y)
let shadowBall = CAShapeLayer()
let shadowBalllRadius :CGFloat = 4
let shadowBallPath : UIBezierPath = UIBezierPath(ovalInRect: CGRect(x: xpos, y: ypos, width: CGFloat(shadowBalllRadius*2), height: CGFloat(shadowBalllRadius*2)))
shadowBall.path = shadowBallPath.CGPath
shadowBall.fillColor = UIColor.clearColor().CGColor
shadowBall.strokeColor = UIColor.whiteColor().CGColor
shadowBall.lineWidth = 0.5
let animation: CABasicAnimation = CABasicAnimation(keyPath: "strokeColor")
animation.fromValue = UIColor.whiteColor().CGColor
animation.toValue = UIColor.clearColor().CGColor
animation.duration = 1.0;
animation.repeatCount = 0;
animation.removedOnCompletion = true
animation.additive = false
self.layer.addSublayer(shadowBall)
shadowBall.addAnimation(animation, forKey: "strokeColor")
}
答案 0 :(得分:0)
问题是,当动画结束时,它会将strokeColor
恢复为原始颜色。您应该将原始形状图层的strokeColor
设置为clearColor()
,这样,当您完成从whiteColor()
到clearColor()
的动画制作时,它将保留在{{1} }}
您还可以将图层的clearColor()
设置为fillMode
并将kCAFillModeForwards
设置为removedOnCompletion
,这样该图层将保留其“动画结束”状态。但我个人只会如上所述设置false
,因为使用strokeColor
的{{1}}会干扰removedOnCompletion
(见下文)。
此外,我可能会建议您在动画完成后删除图层,这样它就不会继续消耗内存,尽管它不再可见。
true