自动滚动UISlider

时间:2013-07-09 22:02:50

标签: iphone ios uiview uiviewcontroller uislider

所以目前我在UIViewcontroller中有一个UISlider,用于在用户滑动时在子视图中启动动画。基本上,当用户滑动时,我将这个电池充满,用空格填充空电池图像指示电池内的电量,用户可以滑动以查看电池在一天中某些时间的能量。

此刻,当View加载时,我希望UISlider自动从滑块的开头滑动并滚动到内部结束,比如5秒。

我实现了一个循环,循环遍历uislider的所有值,使用此循环

for (int i = 0; i < [anObject count] - 2; i++)
{
    sleep(.25);
    NSUInteger index = (NSUInteger)(slider.value + 0.5); // Round the number.
    [slider setValue:index animated:YES];
}

[anObject count] - 2在一天中的这个时间等于62,但是每15秒就会改变并递增,因为我从服务器获取数据。

但是,除此之外,为什么这不起作用?循环?

修改

所以我用NSTIMER做了什么

[NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(animateSlider) userInfo:nil repeats:NO];

animateSlider看起来像这样:

- (void)animateSlider:(NSTimer *)timer
{
    NSLog(@"Animating");
    NSUInteger index = (NSUInteger)(slider.value + 0.5); // Round the number.
    [slider setValue:index animated:YES];
}

但是没有运气......为什么不是NSTimer“开火”.....我隐约知道有一种方法可以使用nstimer方法,但不确定是否需要......

编辑:

啊它确实需要“火”......

NSTimer *timer = [NSTimer timerWithTimeInterval:0.25 target:self selector:@selector(animateSlider) userInfo:nil repeats:NO];
[timer fire];

但由于某种原因,它只会发射一次....任何想法?

1 个答案:

答案 0 :(得分:2)

“出于某种原因它只会发射一次......”

如果您更改了NSTimer设置为:

NSTimer *timer = 
   [NSTimer scheduledTimerWithTimeInterval:0.25 
                                    target:self 
                                  selector:@selector(animateSlider:) 
                                  userInfo:nil 
                                   repeats:YES];

这会立即在当前运行循环上安排计时器。

由于“重复”参数为“是”,因此您每四分钟重复一次计时器,直到您使计时器无效(当达到结束条件时应该这样做,就像滑块到达目的地时一样)。

P.S。您需要稍微更改计时器目标的选择器方法声明。 According to Apple's documentation,“选择器必须对应于返回void并接受单个参数的方法。计时器将自身作为此方法的参数传递。”

所以请改为声明“animateSlider”:

- (void)animateSlider: (NSTimer *) theTimer;