我真的需要一些帮助来放置这个循环:
int timer = 10;
while (timer >= 0) {
[secondsLeft setText:[NSString stringWithFormat:@"%d", timer]];
NSLog(@"%d", timer);
timer--;
sleep(1);
}
无论如何,无论我把这个循环放在哪里,我都会遇到一些错误,除了在IBAction下它完全正常工作,除非它按下按钮按下10秒:P
这是我的.m文件
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize answer;
@synthesize secondsLeft;
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
}
- (IBAction)answerButton:(id)sender {
NSString *str = answer.text; // Takes user input from answer.text
int answerOne = [str intValue]; // converts answer into an integer
if(answerOne == 30) {
self.secondsLeftToAnswer.text = @"Correct!";
} else {
self.secondsLeftToAnswer.text = @"You Suck at Math!";
}
}
@end
无论如何有人可以告诉我如何将这个循环实现到我的代码中,以便循环显示其输出到UILabel(secondsLeft是UILabel,循环应该在UILabel中显示从10到0的倒计时)?
编辑:我如何实施NSTimer来做我想做的事情(从10倒计时)?我试图设置一个,但他们是如此令人困惑。感谢Jasarien的帮助!
答案 0 :(得分:4)
答案是“无处”。 Cocoa是一个事件驱动的系统,这样的循环阻止主线程处理事件,你不会看到标签更改的文本和用户交互将被禁用。有关详细信息,请参阅Main Event Loop文档。
而是使用NSTimer
(for example),它与runloop一起使用以允许定期方法调用。
答案 1 :(得分:0)
为了显示倒计时,您需要在特定时间后更新标签。
以下是描述您想要的功能的代码。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
count = 10;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target: self
selector: @selector(handleTimer)
userInfo: nil
repeats: YES];
}
-(void)handleTimer{
if (count >= 0) {
[lblTimer setText:[NSString stringWithFormat:@"%ld",(long)count]];
count--;
}else{
[timer invalidate];
}
}
希望这会对你有所帮助。快乐的编码:)