如图所示,这个问题困扰了我很久,原因就在于IOS系统自带的UISlider的动画代码只有一句:
[slider setValue:xx animated:YES];//duration depends on distance
就是说,自带的动画方法并不能自定义动画时长,只能由距离所决定,而且动画效果一闪而过。而我们的需求呢,就想要动画效果慢点,动作顺滑。在不自定义的情况下,我开始寻找其他方法去实现需求。
经过尝试,发现
[UIView animateWithDuration:1 animations:^{
[self.slider setValue:progress animated:YES];
} ];
这种方法能做出一定动画效果,但是会出现下面如图的问题
橙色底线跟指示标动画不同步。一个是从左往右移动,一个是从右往左移动。这样子效果还是有点瑕疵。只能继续改进。
然后我想到了把这个动画分段执行。
[UIView animateWithDuration:0.01 animations:^{
[self.slider setValue:progress/100.0 animated:YES];
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.99 animations:^{
[self.slider setValue:progress animated:YES];
}];
}];
先让底色同步到指示标位置,然后再一同开始右移动画。从而实现需求。