Animation 查询UISlider的表示层

Animation 查询UISlider的表示层,animation,uiview,ios,uislider,presentation-layer,Animation,Uiview,Ios,Uislider,Presentation Layer,我正在设置一个简单的UISlider来设置进度动画: [UIView animateWithDuration:songLength delay:0.0 options:UIViewAnimationOptionRepeat| UIViewAnimationOptionAllowUserInteraction| UIViewAnimationOptionBeginFromCurrentState animations

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

通过设计,表示层可以访问层的所有当前动画数据,这是有道理的,但我不知道如何在代码中实现这一点


有什么想法吗?

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

我解决这个问题的方法是使用NSTimer类。一旦我想让进度条开始设置动画,我就将NSTimer设置为0.1s的间隔,并调用一个函数来更新拇指的位置。拇指前/后的动画在其前进过程中,左侧部分为蓝色,剩余部分仍为白色,将自动为您处理

代码如下:

updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES];
因此,每隔.01秒就会调用此方法,它会重新绘制拇指,从而创建动画。不需要动画块

这很有效,我对结果很满意。我关心性能,并将衡量此实现的资源密集程度。这也许是一个好主意,去我上面提到的第一个选择