所以目前我在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];
但由于某种原因,它只会发射一次....任何想法?
答案 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;