2012-03-18 16 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

+0

は、なぜあなたはアプリが応答しないことと何もしないの3秒の期間を課すことをしたいですか? –

+0

私は別のスレッドでいくつかの読み込みを行っているので、sleep(2)以下のコード行を2秒後まで呼び出さないようにしています。 – Snowman

答えて

2

なぜあなたは2秒間メインスレッドをスリープ状態にしていますか?通常、アプリは2秒間完全に反応しなくなるため、恐ろしいアイデアです。

あなたはperformSelector:withObject:afterDelay:を使用することをお勧めします。しかし、その事実を回避する方法はありません。遅延の後に何かが起きるようにするには、遅延の後に呼び出されるメソッドに入っていなければなりません。 sleep()の後にこれらの他のコード行を移動するだけです。

(。そして、本当に、あなたはわずか2秒の遅延でperformSelector:withObject:afterDelay:を使用し、2秒後に起こるために何かをしたい場合)

-1

私はちょうどこれやってしまった:私は

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

をスレッディングに新しい、私はここで安全にやっていることは何ですか?

+1

それは悪いです。バックグラウンドスレッドでUIKitメソッドを使用しないでください! – Felix

関連する問題