Я пытаюсь сказать, где кнопка выбрана или нет, когда CAbasicanimation завершена.Анимация запускается на определенной кнопке при нажатии.
Когда кнопка нажата, я сохраняю значение тега кнопки в целое число «currentSelectedMarker».Это работает и дает желаемый результат, но если еще одна кнопка нажата до того, как анимация не закончена, она обновит эту нажатую кнопку вместо оригинальной кнопки, которая имеет анимацию.
Я знаю, что это потому, что значение«currentSelectedMarker» обновляется при нажатии любой кнопки, но что может быть способом обновить правильную кнопку после завершения анимации.Ниже приведен код, который я использую для анимации.
func AutoUpRadial(button: UIButton, height: Int, value: Int){
let trackLayer = CAShapeLayer()
let radius = height / 3
let circularPath = UIBezierPath(arcCenter: button.center, radius: CGFloat(radius), startAngle: 0, endAngle: 2 * CGFloat.pi, clockwise: true)
trackLayer.path = circularPath.cgPath
trackLayer.strokeColor = UIColor.black.cgColor
trackLayer.opacity = 0.3
trackLayer.fillColor = UIColor.clear.cgColor
trackLayer.lineWidth = 5
trackLayer.strokeEnd = 0
mainScrollView.layer.addSublayer(trackLayer)
autoUpFillRadial(value: value, tmpBtn: button, shape: trackLayer)
}
@objc private func autoUpFillRadial(value: Int, tmpBtn: UIButton, shape: CAShapeLayer){
let basicAnimation = CABasicAnimation(keyPath: "strokeEnd")
basicAnimation.toValue = 1
basicAnimation.duration = CFTimeInterval(value)
basicAnimation.fillMode = .forwards
basicAnimation.isRemovedOnCompletion = true
basicAnimation.delegate = self
shape.add(basicAnimation, forKey: "basic")
}
func animationDidStop(_ anim: CAAnimation, finished flag: Bool) {
if let tmpButton = self.view.viewWithTag(currentSelectedMarker) as? UIButton {
tmpButton.isSelected = false
}
}
«CurrentSelectedMarker» - вот где проблема, насколько мне известно, но я даже не уверен, что это лучший способ решить проблему.Любая помощь приветствуется.
Спасибо