2011-11-08 7 views
0

ラベル、アクティビティインジケータ、およびuiimageviewを含むサブビューを使用しています。私はサブビューでそれを持っており、私はサブビューをポップアップして読み込むときにデフォルトでそれを隠す。しかし、サブビューは私がそれを望む時間を鈍らせるのではなく約0.01秒間現れるという意味を完成させるまで、それを覆すことはありません。隠しプロパティを設定してもすぐに反映されません

私はこのようなやり方を試みました。

do{ 
    loadingSubview.hidden=false; 
    }while(loadingSubview.hidden); 

私が間違っていることは同じ結果をもたらすが、移動する前にプロパティが設定されていることを確認しますか?

答えて

1

UI更新を実行するには、現在のメソッドを実行ループに戻す必要があります。

このUIの更新後、別のNSTimerタスクや他の遅延操作(後で数十ミリ秒)で他の処理を行います。方法の中で待たないでください。

1

注意を。たいていの場合、あなたは何を描画するかをiOSに伝えています。そして、あなたがあなたの方法から脱落した後、それをメインイベントループに描きます。したがって、デバッガをステップバイステップで進めることはできません。

あなたが何かに遅れて反応をしたい場合は、のいずれかを使用します。あなたの1秒の遅延を与える

[self performSelector:@selector(mydelayedtask) withObject:nil afterDelay:1.0f]; 

+0

私は嫌です私はそれが必要なときに私のサブビューをロードしていません。 – endy

+0

表示する必要があるときにすぐに実行ループを終了するのを忘れました。 – hotpaw2

2

「問題」の根本原因は、イベントループがイベントを処理しないようにすることです。ドローイングもその一つです。もう一つは、あなたが本当にすぐにボタンを再表示したい場合は、あなたが行うことができ、ユーザインタラクションイベントなどである:

loadingSubview.hidden = NO; // why "false"??? :) 
[self performSelector:@selector(timeConsumingStuff) 
      withObject:nil 
      afterDelay:0]; // 0 is good here == "when idle" 

あなたはあなたのボタンについて確認することができますが、それが応答(ならびに他の)ではありません時間のかかるものが終わるまで。

別の解決策は、実行ループイベントを明示的に処理することです。 ([NSRunLoop runMode:beforeDate:]を見てください。しかし、時間のかかるものを別のスレッドに移動しない限り、とにかくペナルティが発生します。

関連する問題