/ / Jak uzyskać tytuł UIButtons w tablicy, aby był wyświetlany każdy po kolei w sekwencji czasowej - iphone, objective-c, iphone-sdk-3.0, uibutton

Jak zdobyć UIButtons title w tablicy, która będzie wyświetlana po kolei w sekwencji czasowej - iphone, object-c, iphone-sdk-3.0, uibutton

W moim programie mam serię UIButtons w tablicy, której tytuł chciałbym, aby był wyświetlany po kolei po kolei w sekwencji czasowej po wykonaniu funkcji, która ma pętlę while.

Mam IBAction dołączoną do przycisków i po dotknięciu wywoła inną funkcję, która wykona jakąś operację, a na końcu zmieni tytuł UIButtons w tej tablicy.

Problem polega na tym, że po wykonaniu tej metody zmienił on cały tytuł przycisków jednocześnie, ale chcę, aby tytuł był wyświetlany jeden po drugim w sekwencji czasowej.

Aby wyraźnie zilustrować, oto moje kody:

-(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--;
}



}

Więc próbowałem umieścić NSTimer wcalculatorSteps, a także w tej pętli while, ale nie mogłem dostać się do pracy. Myślę, że może funkcja pętli while jest wystarczająco szybka, aby nie miała szansy zmusić NSTimer do działania na czas.

Wiem, że może zadziałać, jeśli użyję if timer == 1 lubw przeciwnym razie, jeśli licznik czasu == 2 itd. w miarę zwiększania się licznika czasu, każdy powiązany z nim przycisk zmieni się po tym interwale. Jednak kiedy próbowałem użyć for (timer == 1; timer <kamienie; timer ++), nie pokazuje on tytułów przycisków po kolei, ale jednocześnie po zakończeniu pętli. Czy mylę się z moją logiką?

Poza tym próbowałem od czasu do czasu uśpić (2)loop działa również dla NSLog (@ "Number in marblesArray index: ...") pojawiającego się co 2 sekundy, ale tytuł tablicy przycisków nadal jest wyświetlany jednocześnie po zakończeniu pętli while.

Nie jestem pewien, jak mogę uzyskać tytuł przyciskówta tablica ma być wyświetlana po kolei w sekwencji czasowej. Próbowałem przez 2 dni, ale nie mogłem zmusić go do pracy. Doceniam, jeśli ktoś może mi pomóc. Nie wiem, czy to moja logika, czy też istnieje inna funkcja, której można użyć do rozwiązania tego problemu.

Z góry bardzo dziękuję.

Odpowiedzi:

0 dla odpowiedzi № 1

Tak, możesz użyć:

Ale tak naprawdę nie rozumiem twojego kodu i wyjaśnień ...

W selektorze celu timera, możesz mieć static int, aby policzyć liczbę taktów przykład (bardzo prosty):

[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;
}
}