2011-06-16 87 views
0

我正在为iPhone开发应用程序。我的问题是如何每0.5秒显示一个不同文本的新标签。例如,它会显示蓝色,红色,绿色,橙色和紫色;一个接一个。现在我正在这样做:标签显示不能与iPhone应用程序即时通讯

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函数中调用,并且当前不显示新标签。它只显示最后一个。我做错了什么?什么是最好的方法来解决这个问题?

+0

[中的中间为()循环更新的UILabel]的可能重复(http://stackoverflow.com/问题/ 6363828 /更新 - 用于循环的中间的uilabel) – 2011-06-17 00:59:54

+0

另外[动态更新UILabel](http://stackoverflow.com/questions/6336991/dynamically-updating-a-uilabel )和[文本字段等待,直到循环结束更新](http://stackoverflow.com/questio ns/5829977 /)和[更改标签文本的循环](http://stackoverflow.com/questions/6325202/objective-c-loop-to-change-label-text)和[调用睡眠和更新文本字段不起作用](http://stackoverflow.com/questions/5834062/calling-sleep5-and-updating-text-field-not-working) – 2011-06-17 01:01:16

回答

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 :)

+0

非常感谢!这工作完美。 – 2011-06-17 18:47:17