我正在设置一个简单的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类。一旦我希望进度栏开始动画制作,我将设置为0.1S间隔的NSTIMER,并调用功能以更新拇指位置。拇指之前/之后的动画(随着左侧的进展,左侧是蓝色的,仍然是白色的)自动照顾您。

这是代码:

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

因此,每一秒钟的每一个.01都称为该方法,并重新绘制拇指,从而创建动画。无需动画块。

这效果很好,我对结果感到满意。我关心性能,并将衡量该实施的资源密集型。最好选择我上面提到的第一个选项。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top