Бесконечная анимация вращения с «облегчением» и «облегчением» в 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)