Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么UIButton从不隐藏,然后又偷偷回来?_Ios_Objective C_Uibutton - Fatal编程技术网

Ios 为什么UIButton从不隐藏,然后又偷偷回来?

Ios 为什么UIButton从不隐藏,然后又偷偷回来?,ios,objective-c,uibutton,Ios,Objective C,Uibutton,因此,self.pic是我想要隐藏的ui按钮。但出于某种原因,它从未真正隐藏它 请帮忙 - (void)tick:(NSTimer*)time { self.pic.hidden = YES; [NSThread sleepForTimeInterval:1]; self.pic.hidden = NO; [self.pic setEnabled:NO]; if (self.checkPic == YES) { self.live

因此,
self.pic
是我想要隐藏的ui按钮。但出于某种原因,它从未真正隐藏它

请帮忙

- (void)tick:(NSTimer*)time
{
    self.pic.hidden = YES;
    [NSThread sleepForTimeInterval:1];
    self.pic.hidden = NO;

    [self.pic setEnabled:NO];
    if (self.checkPic == YES)
    {
        self.lives--;
        self.livesLabel.text = [NSString stringWithFormat:@"Lives : %d", self.lives];

    }
    [self.pic setImage:[self backgroundImageForGame] forState:UIControlStateNormal];
    [self check];

    self.pic.enabled = YES;
}

为了详细说明@rmaddy在他的评论中所说的话,你不应该在主线程(或UI)上睡觉。当您这样做时,您将阻塞负责对按钮进行可视更改的线程,例如按钮是否隐藏。解决方案是异步进行等待,而GCD有一个内置的函数,可以轻松地进行等待

dispatch\u after()
允许您在选择的队列上创建一个在指定延迟后执行的块。因为您想要更新UI,所以需要返回到主队列对屏幕上的按钮进行更改。下面是一个例子:

self.pic.hidden = YES;

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    self.pic.hidden = NO;
});

不要在主线上睡觉。