我正在为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函数中调用,当前未显示新标签。它只显示最后一个。我做错了吗?什么是最好的方法来解决这个问题?
答案 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:)