Я пытаюсь добавить CAShapelayer один раз каждые 20 мс с заданными координатами x и y. Я бы хотел, чтобы форма исчезла более секунды (например, индикатор). Функция, которую я создал, работает, форма создается в правильном месте и исчезает. Но я получаю дополнительные фигуры, оставшиеся за решеткой.CAShapelayer Duplicates
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")
}
Unrelated, но я нахожу «каждые 20мс», чтобы быть любопытно близко (но не равно) максимальная частота кадров 60 кадров в секунду. Вы используете для этого 'NSTimer'? Почему бы не использовать «CADisplayLink», который по существу является таймером, оптимизированным для обновлений фреймов? – Rob
У меня есть устройство BLE с частотой обновления 50 Гц ... следовательно, 20 мс – duck1970