2012-03-18 64 views
0

我有一個UIView *loadingView,它只是一個黑色的BG和一個UIActivityIndicator。我想加入到我的觀點,然後睡的線程幾秒鐘:在睡覺前添加一個UIView

[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秒內執行所有這些行。

+0

爲什麼不把下面的行放到someFunction中並使用'[self performSelector:@selector(someFunction)withObject:nil afterDelay:2.0];'並刪除睡眠函數。 – Lunayo 2012-03-18 19:12:41

+0

爲什麼你想強制一個3秒的應用程序沒有響應,什麼都不做? – 2012-03-18 19:13:11

+0

我在另一個線程中做了一些加載,所以我不想在睡眠(2)之下的代碼行被調用,直到2秒之後.. – Snowman 2012-03-18 19:22:43

回答

2

爲什麼地球上睡着2秒的主線?通常這是一個可怕的想法,因爲你的應用程序將在2秒內完全無響應。

您有正確的想法使用performSelector:withObject:afterDelay:。但是沒有辦法解決這個事實:如果你想在延遲之後發生某些事情,那麼它必須在延遲之後調用該方法。只需在sleep()之後移動其他代碼行即可。

(真的,如果你想要的東西兩秒鐘後發生的,只是用performSelector:withObject:afterDelay:有兩秒鐘的延遲。)

-1

最後我只是這樣做:

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

我新線程,所以我在這裏安全嗎?

+1

這很糟糕。不要在後臺線程中使用UIKit方法! – Felix 2012-03-18 19:35:02