【问题标题】:Label display not instant with iPhone app使用 iPhone 应用程序不能立即显示标签
【发布时间】:2011-09-16 19:25:38
【问题描述】:

我正在为 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 函数中被调用并且当前没有显示新的标签。它只显示最后一个。我做错什么了吗?解决这个问题的最佳方法是什么?

【问题讨论】:

标签: objective-c ios4 animation uilabel


【解决方案1】:

问题是你没有给运行循环一个运行的机会(因此,绘制发生)。您需要使用定期触发并设置下一个文本的NSTimer(您可以记住当前所在的实例变量)。

或者使用类似的东西(假设 items 是一个 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 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多