1

私のViewControllerでは、2 つの画像 (現在表示されている) を同時に非表示にしようとしましたが、3 秒の遅延がありました。私は

[self performSelector:@selector(hideThem:) withObject:val afterDelay:3.0];

ここで、" hideThem" は、以下を使用して画像を非表示にするルーチンです。「val」は単なる でありNSNumber、この質問にとって重要ではありません。

  [image1 setHidden:YES];  
  [image2 setHidden:YES];

hideThem" " を ( を使用せずに) 直接呼び出すとperformSelector、両方の画像がまったく同時に消えます。これは望ましい効果です。

を使用するperformSelectorと、示されているように、1 つの画像が非表示になり、0.5 秒 (またはそれくらい) 後に別の画像が非表示になります。独自の実行ループはありません。画像はUIImageViewオブジェクトであり、「自己」の下のビュー階層の一部です。

これは がイベントのタイミングを処理する方法による効果だと思いますが、「 」への呼び出しの「後」に両方を非表示に設定する必要がある場合に、その 0.5 秒の遅延でIOSの効果が発生する理由がわかりません。setHiddenperformSelectorhideThem

IOS の何が原因でこの動作が発生しますか?

この問題を解決するために推奨される方法は何ですか (つまり、3 秒後に両方の画像が同時に視覚的に非表示になります。

4

4 に答える 4

0

1):メソッド call@selector(hideThem:)にコロンが表示されます。hideThem メソッドが入力パラメーターを受け取るかどうかを再確認してください。

[self performSelector:@selector(hideThem:) withObject:val afterDelay:3.0]; 2)メインスレッドでこれを呼び出すようにしてください

試す、

performSelectorOnMainThread
于 2013-04-27T13:55:27.083 に答える
0

犯人を見つけました。問題を特定するのに役立つすべての提案に感謝します。そして、David H... 非常に興味深いアイデアであり、プロジェクトが継続するにつれて、実際にそれらを使用できる可能性があります。

答えは次のとおりです。多くの検索、コードのコメントアウト、およびログを使用した追跡の後、2 秒の時間枠で他の場所で呼び出されていた別の関連の performSelector を最終的に見つけました (したがって、.5 秒のデルタを示していると思いました)画像の非表示の間)。

要するに...奇妙なコーディングのバグです。再度、感謝します!

于 2013-04-28T21:52:07.930 に答える