我正在设置一个简单的UISlider来动画它的进度:
[UIView animateWithDuration:songLength
delay:0.0
options:UIViewAnimationOptionRepeat|
UIViewAnimationOptionAllowUserInteraction|
UIViewAnimationOptionBeginFromCurrentState
animations:^{
[UIView setAnimationDuration:10.0];
[myUISlider setValue:10.0];
} completion:nil
];
[UIView commitAnimations];
当用户按下按钮时,我想在其位置停止动画。
我理解我需要查询表示层以找出值,但是,表示层是CALayer类型而不是UISlider。因此,它具有图层属性,就像它在屏幕上的x / y位置一样,但不是滑块本身的值。
有意义的是,通过设计,表示层可以访问图层的所有当前动画数据,但我不确定如何在代码中解决这个问题。
任何想法?
答案 0 :(得分:0)
我想出了解决这个问题的一种方法,以防你处理同样的问题。 根据设计,没有明显的方法来查询UISlider的动画缩略图。动画查询适用于图层,因此一种方法是创建自己的背景并为拇指创建一个动画层。
我解决这个问题的方法是使用NSTimer类。一旦我想要进度条开始动画我设置NSTimer 0.1秒间隔并调用函数来更新拇指位置。拇指之前/之后的动画(当左侧部分进展为蓝色,剩下的部分仍为白色时)会自动为您完成。
这是代码:
updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];
所以每调用一次.01这个方法,它会重绘拇指,从而创建动画。不需要动画块。
这很有效,我对结果感到满意。我关注性能,并将衡量这种实施的资源密集程度。使用我上面提到的第一个选项也许是一个好主意。