我希望我的UILabel每秒更改一次文本(更改时淡入和淡出)对于我的数组中的每个项目,然后在最后再次通过它。我试过了:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
NSArray *arrayOfText = @[@"Test1",@"Test2",@"Test3",@"Test4"];
for (int i = 0; i < [arrayOfText count]; i++) {
[NSThread sleepForTimeInterval:2.0f];
self.changingTextLabel.text = [arrayOfText objectAtIndex:i];
}
}
这会加载ViewController,大约8秒后将文本更改为数组中的最后一项。
我做错了什么?有一个更好的方法吗?过去几天我找了一个解决方案,没有什么对我有用。谢谢!
答案 0 :(得分:2)
永远不要睡在主队列上。它会阻止您应用的用户界面。
您有几个选择,但使用NSTimer
可能是最简单的。
向您的班级添加几个实例变量:
@implementation WhateverViewController {
NSTimer *_labelTimer;
NSInteger labelIndex = 0;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:YES];
NSArray *arrayOfText = @[@"Test1",@"Test2",@"Test3",@"Test4"];
// Setup a timer to run every 2 seconds and update the label
// Increment the labelIndex so the next label is shown next time
_labelTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^(NSTimer *timer) {
self.changingTextLabel.text = arrayOfText[labelIndex];
labelIndex = (labelIndex + 1) % arrayOfText.count;
}];
}
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
// Stop the timer when we leave
[_labelTimer invalidate];
_labelTimer = nil;
}
- (void)dealloc {
// Make sure it is stopped
[_labelTimer invalidate];
}