CAShapelayer重复

时间:2016-06-22 18:36:05

标签: swift cashapelayer cabasicanimation

我试图每隔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")

}

1 个答案:

答案 0 :(得分:0)

问题是,当动画结束时,它会将strokeColor恢复为原始颜色。您应该将原始形状图层的strokeColor设置为clearColor(),这样,当您完成从whiteColor()clearColor()的动画制作时,它将保留在{{1} }}

您还可以将图层的clearColor()设置为fillMode并将kCAFillModeForwards设置为removedOnCompletion,这样该图层将保留其“动画结束”状态。但我个人只会如上所述设置false,因为使用strokeColor的{​​{1}}会干扰removedOnCompletion(见下文)。

此外,我可能会建议您在动画完成后删除图层,这样它就不会继续消耗内存,尽管它不再可见。

true

请参阅How to remove a CALayer-object from animationDidStop?