NSTimer无法调用UIButton setHidden:是/否

时间:2012-11-04 22:42:32

标签: iphone ios xcode ipad cocoa

我无法理解为什么这不起作用。我试图在计时器周期命中时显示lblstatus:

-(void) viewDidAppear:(BOOL)animated
{
        [NSTimer scheduledTimerWithTimeInterval:1
                                         target:self
                                       selector:@selector(TimeForPictureCycle)
                                       userInfo:nil
                                        repeats:NO];
}

-(void)TimeForPictureCycle
{
    while(YES)
    {
        [lblStatus setHidden:NO];
        sleep(2);
        [lblStatus setHidden:YES];
        sleep(3);
    }
}

2 个答案:

答案 0 :(得分:3)

您在主线程上调用sleep(),这意味着在您将标签设置为hidden后该线程暂停并阻止运行循环继续,因此无法更新您的UI。您当前的代码简单地阻止了整个应用程序。

你能做的是:

-(void) viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    self.showTimer = [NSTimer scheduledTimerWithTimeInterval:1
                                         target:self
                                       selector:@selector(showLabel)
                                       userInfo:nil
                                        repeats:NO];
}

-(void)showLabel
{ 
    [lblStatus setHidden:NO];
    self.hideTimer = [NSTimer scheduledTimerWithTimeInterval:2
                                         target:self
                                       selector:@selector(hideLabel)
                                       userInfo:nil
                                        repeats:NO];
}

-(void)hideLabel
{        
    [lblStatus setHidden:YES];
    self.showTimer = [NSTimer scheduledTimerWithTimeInterval:3
                                         target:self
                                       selector:@selector(showLabel)
                                       userInfo:nil
                                        repeats:NO];
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.showTimer invalidate];
    [self.hideTimer invalidate];
}

答案 1 :(得分:1)

您可以通过以下方式完成:

-(void)viewDidAppear:(BOOL)animated {
    [lblStatus performSelector:@selector(setHidden:) withObject:0 afterDelay:1];
    [lblStatus performSelector:@selector(setHidden:) withObject:@1 afterDelay:3];
}

我不确定为什么我可以将0作为对象传递,但它可以工作。