我遵循了有关如何使用 UIViewPropertyAnimator 创建交互式 iOS 控制中心动画的教程:
http://www.swiftkickmobile.com/building-better-app-animations-swift-uiviewpropertyanimator/
向上或向下滑动底部菜单时,松开手指后,我想添加平移速度UIViewPropertyAnimator
并继续动画:
popupViewPanned(recognizer:) {
switch recognizer.state {
.
.
.
// after finger released
case .end:
// continue all animations using pan velocity with spring timing
let normalizedPanVelocity: // how to normalize pan velocity
runningAnimators.forEach { $0.continueAnimation(withTimingParameters: spring(for: velocity()), durationFactor: 0) }
}
}
func velocity() -> CGVector {
let pan = panRecognizer
let progress = runningAnimators[0].fractionComplete
let fraction = popupOffset*(1 - progress)
return CGVector(with: pan.velocity(in: view), fraction: fraction)
}
func spring(for velocity: CGVector = .zero) -> UITimingCurveProvider {
return UISpringTimingParameters(dampingRatio: 0.9, initialVelocity: velocity)//UISpringTimingParameters(mass: 2.5, stiffness: 80, damping: 25, initialVelocity: velocity)
}
问题是当我快速向上或向下滑动菜单并释放更精细时,动画似乎撞到了墙上(快慢),然后继续休息
那么我该如何解决这个问题?我已经尝试了一整天,但我无法修复它