首页 文章

查询UISlider的表示层

提问于
浏览
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位置一样,但不是滑块本身的值 .

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

有任何想法吗?

1 回答

  • 0

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

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

    这是代码:

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

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

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

相关问题