Бесконечная анимация вращения с «облегчением» и «облегчением» в Swift?

Я хочу создать «рулетку» (простуюUIImageViewс соответствующим изображением) и покрутите его.

Есть похожие вопросы, но они описывают, как вращаться с линейной скоростью, используя несколько рекурсивных вызовов анимации. Но в моем случае мне нужно использоватьeaseInанимация начала вращения иeaseOutна остановке. Так что ни один ответ из этих тем не поможет.

Как решить эту проблему?

Пример кода

      func spin() {
        UIView.animate(withDuration: 0.3, delay: 0, options: UIView.AnimationOptions.curveLinear, animations: { () -> Void in
                self.imgViewRoulette.transform = self.imgViewRoulette.transform.rotated(by: .pi / 2)
            }) { (finished) -> Void in
                if finished {
                    self.spin()
                }
            }
    }

1 ответ

Следующее обновление вашегоspinФункция начнет с EasyIn на 1/4 оборота, затем сделает серию линейных 1/4 оборота, а затем завершится на EasyOut на 1/4 оборота.

      func spin(_ iteration: Int = 0, count: Int) {
    let options: UIView.AnimationOptions
    switch iteration {
    case 0:
        options = .curveEaseIn
    case count:
        options = .curveEaseOut

    default:
        options = .curveLinear
    }

    UIView.animate(withDuration: 0.3, delay: 0, options: options, animations: { () -> Void in
        self.imgViewRoulette.transform = self.imgViewRoulette.transform.rotated(by: .pi / 2)
    }) { (finished) -> Void in
        if iteration < count {
            if finished {
                self.spin(iteration + 1, count: count)
            }
        }
    }
}

Это можно вызвать примерно так:

      someObject.spin(count: 8)
Другие вопросы по тегам