在睡觉前添加UIView

时间:2012-03-18 18:44:28

标签: iphone objective-c

我有UIView *loadingView,只有黑色BG和UIActivityIndicator。我想将此添加到我的视图中,然后将线程休眠几秒钟:

[self.window addSubview:loadingView];
loadingView.hidden=NO;
sleep(2);

显然,这还没有足够的时间来添加视图 - 线程休眠但视图没有被添加,并且仅在2秒后出现。所以我试过这样的事情:

-(void)sleep
{
    sleep(2);
}

[self.window addSubview:loadingView];
loadingView.hidden=NO;
[self performSelector:@selector(sleep) withObject:nil afterDelay:0.01];

这将显示睡眠前的视图,这是所需的结果。但是,在这3行中,有几行代码在睡眠之后我不想执行,在0.01秒内,所有这些行都被执行。

2 个答案:

答案 0 :(得分:2)

为什么你在主线上睡2秒钟?通常这是一个可怕的想法,因为你的应用程序将在2秒内完全没有响应。

您使用performSelector:withObject:afterDelay:时有正确的想法。但是没有办法解决这个问题:如果你想在延迟之后发生某些事情,那么它必须进入延迟后调用的方法。只需在sleep()之后移动其他代码行。

(实际上,如果你想在两秒钟之后发生一些事情,只需使用performSelector:withObject:afterDelay:,延迟两秒。)

答案 1 :(得分:-1)

我最后这样做了:

-(void)addLoadingView
{
    [self.window addSubview:loadingView];
    loadingView.hidden=NO;
}
 //some function...
 [self performSelectorInBackground:@selector(addLoadingView) withObject:nil];
 sleep(2);

我是线程新手,我在这里做的安全吗?