Анимация слоя не удаляется в ячейке - PullRequest
0 голосов
/ 27 августа 2018

У меня есть 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
}
...