Iphone 自动滚动滑块

Iphone 自动滚动滑块,iphone,ios,uiview,uiviewcontroller,uislider,Iphone,Ios,Uiview,Uiviewcontroller,Uislider,因此,目前我在UIViewcontroller中有一个UISlider,用于在用户滑动时在子视图中启动动画。。基本上,当用户滑动时,我有一个填充电池,在空电池图像中填充一个指示条,以指示电池内的电量,用户可以滑动以查看电池在一天中特定时间的电量 此时,当视图加载时,我希望UISlider自动开始从滑块的开头滑动,并在5秒内滚动到末尾 我实现了一个循环,使用这个循环遍历uislider的所有值 for (int i = 0; i < [anObject count] - 2; i++) {

因此,目前我在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];
}
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设置更改为:

NSTimer *timer = 
   [NSTimer scheduledTimerWithTimeInterval:0.25 
                                    target:self 
                                  selector:@selector(animateSlider:) 
                                  userInfo:nil 
                                   repeats:YES];
这将立即在当前运行循环上安排计时器

由于“repeats”参数为“YES”,因此您应该每四分之一秒重复一次计时器,直到计时器失效(当达到结束条件时,您应该执行此操作,如滑块到达其目的地时)

另外,您需要稍微更改计时器目标的选择器方法声明,“选择器必须对应于返回void并接受单个参数的方法。计时器将自身作为参数传递给此方法。”

因此,声明“
animateSlider
”,如下所示:

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

不要使用
sleep()在这种情况下。这将暂停整个应用程序。取而代之的是:
setValue:animated:
,或者类似的。最好使用每0.25秒触发一次的NSTimer并更新滚动视图。然后,当它达到某个值时,可以使计时器无效。这样你就不需要睡觉,也不需要for循环。什么都不会发生。。。。我不经意间有点过分热情,并且对这件事投了赞成票,但它并没有“开火”很多次,只有一次。。。。让我看看代码。。。但是我的animateSlider方法有一个log语句,我只注意到一个log语句。。。不是很多。。。我想我会得到很多日志语句,但我只得到一条:/n您可能需要稍微调整“
animateSlider
”方法。看到我编辑过的答案。所以我调整了方法,但仍然没有,只得到一条日志语句“Animating”:/。你还有什么建议吗?我应该在方法中的任何地方传递变量“theTimer”吗?我想我应该知道但不确定在哪里…你还在明确地调用“
fire
”吗?如果是这样的话,你不需要这样做。而且,不需要明确地传递或引用“
计时器”。它只是调用“
animateSlider
”方法的计时器实例。我开始怀疑你的视图控制器是否没有持久化,或者计时器是否正在释放,或者以某种方式与创建时一样快地失效?当你明确表示。。。你是说在方法调用之外吗?因为我在上面代码中所做的正是我如何实现方法和viewcontroller。。。。此外,NSTimer变量也放置在viewDidLoad中。我不太确定我们现在要走了,但我几乎要说“f***”了。。。。这太琐碎了:/
NSTimer *timer = 
   [NSTimer scheduledTimerWithTimeInterval:0.25 
                                    target:self 
                                  selector:@selector(animateSlider:) 
                                  userInfo:nil 
                                   repeats:YES];
- (void)animateSlider: (NSTimer *) theTimer;