У меня есть CAShapeLayer
, добавленное к UITableViewCell
.Когда этот слой анимирован, анимационная клавиша animationKeys()
не исчезнет после завершения анимации.Тем не менее, я тестировал этот слой в обычном UIView
, и когда анимация завершена, animationKeys()
пуст, как и должно быть.Почему это отличается, когда слой добавляется в UITableViewCell
?
Причина, по которой я обращаюсь к animationKey()
, заключается в проверке анимации анимации.
UITableViewCell
не имеет ничего, кроме CAShapeLayer
.Также нет UIViewController
и UITableView
.
Код для анимации:
var clockwise = true
@objc func buttonPressed(_ sender: UIButton) {
let animation = CABasicAnimation(keyPath: "transform.rotation")
if let presentation = customLayer.presentation() {
animation.fromValue = presentation.value(forKeyPath: animation.keyPath!)
}
print(customLayer.animationKeys() ?? "its nil!") // first time its "nil", but prints `transform.rotation` after that.
let radian = customLayer.animationKeys()?.isEmpty ?? true ? CGFloat(360) / 180.0 * .pi * (clockwise ? 1 : -1) : 0
let result = CATransform3DMakeRotation(radian, 0, 0, -1)
animation.toValue = radian
animation.duration = 2.5
animation.isRemovedOnCompletion = true
animation.fillMode = kCAFillModeRemoved
let curve = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
animation.timingFunction = curve
CATransaction.begin()
CATransaction.setDisableActions(true)
customLayer.transform = result
CATransaction.commit()
customLayer.add(animation, forKey: animation.keyPath)
clockwise = !clockwise
}