1

我正在设置一个简单的 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 位置,但没有滑块本身的值。

通过设计表示层可以访问层的所有当前动画数据是有道理的,但我不确定如何在代码中解决这个问题。

有任何想法吗?

4

1 回答 1

0

我想出了解决这个问题的一种方法,以防你处理同样的问题。按照设计,没有明显的方法可以查询 UISlider 的动画拇指。动画查询适用于图层,因此一种方法是创建自己的背景并为拇指图层设置动画。

我解决这个问题的方法是使用 NSTimer 类。一旦我想让进度条开始动画,我将 NSTimer 设置为 0.1s 间隔并调用一个函数来更新拇指位置。拇指之前/之后的动画(随着它的进展,左侧部分是蓝色的,剩下的部分仍然是白色的)会自动为您处理。

这是代码:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];

所以每隔 0.01 秒调用一次这个方法,它会重绘拇指,从而创建动画。不需要动画块。

这很好用,我对结果很满意。我关心性能,并将衡量此实施的资源密集程度。使用我上面提到的第一个选项可能是个好主意。

于 2010-11-16T23:04:23.170 回答