查询UISlider的表示层

时间:2010-11-04 18:11:39

标签: animation uiview ios uislider presentation-layer

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

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

任何想法?

1 个答案:

答案 0 :(得分:0)

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

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

这是代码:

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

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

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