在我的程序中,我在数组中有一系列UIButtons,我希望在执行具有while循环的函数后,在一个定时序列中逐个显示每个标题。
我有一个IBAction附加到按钮上,当触摸时会调用另一个将执行某些操作的函数,最后,将更改该数组中的UIButtons标题。
问题是它在执行该方法后同时更改了整个按钮标题,但我希望标题按时间顺序逐个显示。
为清楚说明,这是我的代码:
-(IBAction)touchedButton1:(id)sender
{
[self calculateSteps:0];
}
-(void)calculateSteps:(NSUInteger)hole_index2
{
index = hole_index2;
NSNumber *tempNumber = [marblesArray objectAtIndex:index];
stones = [tempNumber intValue];
[marblesArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:0]];
[[buttonsArray objectAtIndex:index] setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:0].intValue] forState:UIControlStateNormal];
while(stones > 0) {
if (player == PLAYER_A && stones >= 1 && index == 6) {
NSNumber *tempNumber3 = [storeArray objectAtIndex:0];
NSUInteger tempInt3 = [tempNumber3 intValue];
tempInt3++;
[storeArray replaceObjectAtIndex:0 withObject:[NSNumber numberWithInt:tempInt3]];
[buttonPlayerA setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt3].intValue] forState:UIControlStateNormal];
stones--;
if (stones == 0) { // end in PLAYER A's store
NSLog(@"end in big hole player A");
return;
}
}
if (player == PLAYER_B && stones >= 1 && index == 12) {
NSNumber *tempNumber4 = [storeArray objectAtIndex:1];
NSUInteger tempInt4 = [tempNumber4 intValue];
tempInt4++;
[storeArray replaceObjectAtIndex:1 withObject:[NSNumber numberWithInt:tempInt4]];
[buttonPlayerB setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt4].intValue] forState:UIControlStateNormal];
stones--;
if (stones == 0) { // end in PLAYER B's store
NSLog(@"end in big hole player B");
return;
}
}
index++;
if (index >= NUM_HOLES) index = 0;
NSNumber *tempNumber2 = [marblesArray objectAtIndex:index];
tempInt2 = [tempNumber2 intValue];
tempInt2++;
[marblesArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:tempInt2]];
NSLog(@"Number in marblesArray index: %d", [NSNumber numberWithInt:tempInt2].intValue);
[[buttonsArray objectAtIndex:index] setTitle:[NSString stringWithFormat:@"%d", [NSNumber numberWithInt:tempInt2].intValue] forState:UIControlStateNormal];
stones--;
}
}
所以,我试图将NSTimer放在calculateSteps方法中,也放在那个while循环中但是无法工作。我想也许while循环功能足够快,以至于没有机会让NSTimer及时工作。
我知道如果我使用if = = 1,或者如果计时器== 2等,当计时器增加时,它可以工作,与之关联的每个按钮将在该间隔后改变。但是,当我尝试使用(timer == 1; timer< stones; timer ++)时,它不会逐个显示按钮标题,而是在完成循环后同时显示。我的逻辑错了吗?
另外,我也尝试将sleep(2)置于while循环中,它适用于每2秒出现的NSLog(@“marblesArray index中的数字:......”),但仍然按钮数组标题仍然while循环完成后同时显示。
我不确定如何才能让该数组中的按钮标题按时间顺序逐个显示。已经尝试了2天,但无法让它工作。 感谢是否有人可以帮助我。我不知道这是我的逻辑,还是有其他功能可以解决这个问题。
非常感谢您提前。
答案 0 :(得分:0)
是的,您可以使用:
但我真的不明白你的代码和你的解释......
在计时器的目标选择器中,您可以使用静态int来计算刻度数 例子(非常简单):
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(onTimer) userInfo:nil repeats:NO];
-(void)onTimer{
static int ticks = 0;
ticks++;
if (ticks==1) {
//TODO
} else if (ticks==2) {
//TODO
} else if (ticks==3) {
//TODO
} else {
//TODO
ticks=0;
}
}