我在Cocoa中创建一个简单的倒计时应用程序。当我点击“开始倒计时”按钮时,我得到了旋转鼠标指示器。在正确的时间之后(例如,如果在框中放置“2”,应用程序将等待2秒),TextField会直接跳到0.这是我的代码:
#import "APPAppDelegate.h"
@implementation APPAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
}
- (IBAction)StartCountdown:(id)sender {
int counterNow, counterLater;
counterNow = [_FieldCount intValue];
while (counterNow>1){
counterNow = [_FieldCount intValue];
counterLater = counterNow - 1;
[NSThread sleepForTimeInterval:1.0f];
[_FieldCount setIntValue:counterLater];
}
}
@end
答案 0 :(得分:1)
您需要让运行循环运行才能使更新进入屏幕。你正在改变价值,然后睡觉线程。一个更好的方法是让NSTimer
设置文本字段的文本,然后在其上调用-setNeedsDisplay:YES
。像这样:
-(void)fireTimer:(NSTimer*)timer
{
counterNow = [_FieldCount intValue];
counterNow--;
[_FieldCount setIntValue:counterNow];
}
这假定_FieldCount
是NSTextField
。您可以通过创建重复计时器来设置它。如果您希望每秒重复一次,则可以执行以下操作:
NSTimer* secondsTimer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(fireTimer:) userInfo:nil repeats:YES];