Objective c iPhone应用程序的标签显示不是即时的
我正在为iPhone开发一个应用程序。我的问题是如何每隔0.5秒显示一个带有不同文本的新标签。例如,它将显示蓝色、红色、绿色、橙色和紫色;一个接一个。现在,我正在这样做:Objective c iPhone应用程序的标签显示不是即时的,objective-c,ios4,animation,uilabel,Objective C,Ios4,Animation,Uilabel,我正在为iPhone开发一个应用程序。我的问题是如何每隔0.5秒显示一个带有不同文本的新标签。例如,它将显示蓝色、红色、绿色、橙色和紫色;一个接一个。现在,我正在这样做: results = aDictionary; NSArray *myKeys = [results allKeys]; NSArray *sortedKeys = [myKey sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
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)]];
此函数在ViewDidDisplay函数中调用,当前不显示新标签。它只显示末尾的一个。我做错什么了吗?最好的方法是什么 问题在于,您没有给运行循环一个运行的机会(因此,无法进行绘图)。您需要使用一个定期触发并设置下一个文本的
NSTimer
(您可以在实例变量中记住您当前所在的位置)
或者使用类似的方法(假设项目是一个保存字符串的NSArray
):
以触发初始更新
当然,您需要确保视图消失时执行不会继续,您可以通过取消performSelector来执行,或者如果您使用的是计时器,只需将其无效,或者使用布尔值,或者
如果你真的想变得更花哨,可以使用GCD:)和的可能副本
- (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];
}
}
[self updateText:[NSNumber numberWithUnsignedInteger:0]];