iPhone应用程序不会立即显示标签

时间:2011-06-16 23:21:10

标签: objective-c ios4 animation uilabel

我正在为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 :(得分:0)

问题是你没有给运行循环一个运行的机会(因此,绘图发生)。您将需要使用定期触发的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]];

触发初始更新。

当然,当你的视图消失时,你需要确保表演没有继续,你可以通过取消performSelector来实现这一点,或者如果你正在使用一个计时器,只需使它失效,或者使用布尔值,或者......

如果你想变得非常喜欢,请使用GCD:)