1

因此,目前我在 UIViewcontroller 中有一个 UISlider,用于在用户滑动时在子视图中启动动画。. 基本上,当用户滑动时,我有这个电池,里面有一个填充物,用一个条形填充空电池图像,以指示内部的电源一个电池,用户可以滑动查看电池在一天中特定时间的电量。

目前,当视图加载时,我希望 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];

但由于某种原因,它只触发一次......有什么想法吗?

4

1 回答 1

2

“由于某种原因,它只触发一次……”

如果您将 NSTimer 设置更改为:

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

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

并且由于“重复”参数为“是”,然后您将每四分之一秒重复一次计时器,直到您使计时器无效(当达到结束条件时,您应该这样做,例如当滑块到达其目的地时)。

PS您需要稍微更改计时器目标的选择器方法声明。 根据苹果的文档,“选择器必须对应于返回 void 并采用单个参数的方法。计时器将自身作为参数传递给该方法。”

所以像这样声明“ animateSlider”:

- (void)animateSlider: (NSTimer *) theTimer;
于 2013-07-09T22:57:57.320 回答