Iphone 自动滚动滑块
因此,目前我在UIViewcontroller中有一个UISlider,用于在用户滑动时在子视图中启动动画。。基本上,当用户滑动时,我有一个填充电池,在空电池图像中填充一个指示条,以指示电池内的电量,用户可以滑动以查看电池在一天中特定时间的电量 此时,当视图加载时,我希望UISlider自动开始从滑块的开头滑动,并在5秒内滚动到末尾 我实现了一个循环,使用这个循环遍历uislider的所有值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++) {
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;