我有一组UISlider控件需要设置动画,从值到另一个值。
动画的要求是它需要匹配(尽可能接近)来自Android平台的AnticipateOvershootInterpolator的效果。
AnticipateOvershootInterpolator
提及的文档:
带有动画的一个插补器,其中改变开始向后然后向前飞 并超过目标值,最后回到最后 值。
这是我所拥有的结构。为了这个问题,重点将放在1 UISlider上。
[UIView animateWithDuration:1.0
delay:1.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.slider setValue:100 animated:YES];
} completion:^(BOOL finished) {
if (finished) {
//some other stuff
}
}];
我希望为options
参数找到一个合适的值(我的代码中UIViewAnimationOptionCurveEaseOut
,遗憾的是与所需的效果不匹配),以匹配AnticipateOvershootInterpolator
效果。<登记/>
我也知道使用animateWithDuration
方法可能无法实现这种效果,因此欢迎任何建议。
如何在iOS平台上实现AnticipateOvershootInterpolator
效果?
答案 0 :(得分:0)
如果你想用UIView动画实现它,那么你最好的选择应该是关键帧动画
UIView.animateKeyframes(withDuration: 0.8, delay: 0, options: [], animations: {
UIView.addKeyframe(withRelativeStartTime: 0, relativeDuration: 0.25, animations: {
// start animation update your values here
})
UIView.addKeyframe(withRelativeStartTime: 0.24, relativeDuration: 0.25, animations: {
// update the postion values here
})
// continue adding at least 2 more keyframes with relative start and change your values as you like them
}, completion: nil)
做一个这样的动画,甚至做得更好。你必须研究UIKit Dynamics
// self.view can be any view
let animator = UIDynamicAnimator(referenceView: self.view)
它有很多有用的选项 你必须研究UIKit动态行为
答案 1 :(得分:0)
您可以通过首先制作一个减少值(需要设置动画)的常规动画来创建预期效果,并在该完成时添加animateWithDuration:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion
以使用过冲效果动画滑块值:) < / p>
像这样的Smth
[self.slider setValue:30 animated:NO];
[UIView animateWithDuration:1.0
delay:1.0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
[self.slider setValue:25 animated:YES];
} completion:^(BOOL finished) {
if (finished) {
[UIView animateWithDuration:duration
delay:0
usingSpringWithDamping:0.5
initialSpringVelocity:0.0f
options:0
animations:^{
[self.slider setValue:80 animated:NO];
} completion:nil];
}
}];
希望它有效:)