Дисплей этикетки не мгновенный с приложением iPhone - PullRequest
0 голосов
/ 17 июня 2011

Я занимаюсь разработкой приложения для iPhone. У меня вопрос, как отображать новый ярлык с другим текстом каждые 0,5 секунды. Например, он будет отображать синий, красный, зеленый, оранжевый и фиолетовый; один за другим. Прямо сейчас я делаю это:

    results = aDictionary;
    NSArray *myKeys = [results allKeys];
    NSArray *sortedKeys = [myKey sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
    int keyCount = [sortedKeys count];
    while (flag == NO) {


        NSTimeInterval timeMS = [startDate timeIntervalSinceNow] * -10000.0;            

        if (timeMS >= i) {
            ii++;
            i += 1000;
            NSLog(@"endDate = %f", timeMS);
            int randomNumber = rand() % keyCount  + 1;
            lblResult.text = [results valueForKey:[sortedKeys objectAtIndex:(randomNumber - 1)]];
            result = [results valueForKey:[sortedKeys objectAtIndex:(randomNumber - 1)]];
            lblResult.text = result;

       }
        if (ii > 25) {
            flag = YES;
        }
    }
    lblResult.text = [results valueForKey:[sortedKeys objectAtIndex:(sortedKeys.count - 1)]];

эта функция вызывается в функции viewDidAppear и в настоящее время не отображает новые метки. Он отображает только один в конце. Я делаю что-то не так? Каков наилучший метод для этого?

1 Ответ

0 голосов
/ 17 июня 2011

Проблема в том, что вы не даете циклу выполнения возможность работать (и, следовательно, происходит рисование). Вы захотите использовать NSTimer, который периодически запускается и устанавливает следующий текст (вы можете помнить переменную экземпляра, где вы находитесь в данный момент).

Или используйте что-то вроде этого (при условии, что элементы NSArray содержат ваши строки):

- (void)updateText:(NSNumber *)num
{
    NSUInteger index = [num unsignedInteger];
    [label setText:[items objectAtIndex:index]];
    index++;

    // to loop, add
    // if (index == [items count]) { index = 0; }

    if (index < [items count]) {
        [self performSelector:@selector(updateText:) withObject:[NSNumber numberWithUnsignedInteger:index] afterDelay:0.5];
    }
}

В начале (например, в viewDidAppear:), вы можете позвонить

[self updateText:[NSNumber numberWithUnsignedInteger:0]];

для запуска первоначального обновления.

Конечно, вам нужно убедиться, что выполнение не продолжается, когда ваше представление исчезает, вы можете сделать это, отменив executeSelector, или если вы используете таймер, просто аннулируйте его или используйте логическое значение, или ...

А если вы хотите стать действительно модным, используйте GCD:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...