【发布时间】:2013-07-09 22:02:49
【问题描述】:
所以目前我在 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];
但由于某种原因,它只触发一次......有什么想法吗?
【问题讨论】:
-
在这种情况下不要使用
sleep();。这将暂停整个应用程序。 -
而是:
setValue:animated:,或类似的。 -
最好使用每 0.25 秒触发一次并更新滚动视图的 NSTimer。然后,当它达到某个值时,您可以使计时器无效。这样你就不必睡觉,也没有 for 循环。
标签: iphone ios uiview uiviewcontroller uislider