如何使用 UIViewPropertyAnimator 进行 360º 旋转

Dav*_*mes 3 animation ios swift

如果我想通过UIViewPropertyAnimator如何顺时针 360º 动画对象来利用用户交互动画?

// Does not animate
let animator = UIViewPropertyAnimator(duration: 2, curve: .linear) {
    let radians = Angle(360).radians // 6.28318530717959
    view.transform = view.transform.rotated(by: CGFloat(radians))
}
// (Using RxSwift to handle the user interaction via UISlider, 
// but that can be ignored as an implementation detail for this question.)
let scrubs = slider.rx.value.asDriver()
scrubs.drive(onNext: { (value:Float) -> Void in
    animator.fractionComplete = CGFloat(value)
})
Run Code Online (Sandbox Code Playgroud)

Dav*_*mes 5

幸运的是,UIViewPropertyAnimator这很简单(如果不是有点hackish?)。只需制作两个动画,每个动画 180º。:

let animator = UIViewPropertyAnimator(duration: 2, curve: .linear) {
    let radians = Angle(180).radians // 3.14159265358979
    view.transform = view.transform.rotated(by: CGFloat(radians))
}
animator.addAnimations {
    let radians = Angle(180).radians
    view.transform = view.transform.rotated(by: radians)
}
Run Code Online (Sandbox Code Playgroud)

这就像一个动画,可以通过fractionComplete.

示例游乐场