0

私は知っています:

performSelector:afterDelay:とこれらがありますが、すべての遅延に対して常に追加のメソッドを作成する必要があります。で、内でCocos2d-iphoneを使用します。の外でも動作する場合はクールです。CCActionCCTimeDelayCCSequenceCocos2d

1.

1.3 秒待ちたいが、そのためにメソッドを半分に分割したくない場合は、どうすればよいですか?

2.

いつ待機してコンテキストを変更しないかを知っています。スレッドは何もしません。したがって、 performSelector メソッドはそのために適しています。

アプリ全体が待機するのではなく、待機中にuserInputを受け入れる必要があることを実現する方法。2 つのステップのアニメーションを作成したいとしましょう。その間に 0.8 秒の時間間隔が必要です。それを1つの方法にとどめながらマルチスレッドを使用するには、ブロックを使用します(他のアイデアは高く評価されます)。メインスレッドが邪魔されないように、ブロック内で待機する方法は?

4

2 に答える 2

3

ブロックを実行する GCD (Grand Central Dispatch) の方法はどうですか? 追加のメソッドなしで、コードを同じ場所に置くことができます。

double delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    //  Do whatever you want
});

dispatch_get_main_queue()独自のキューに置き換えることができます。Raywenderlichで詳細を読む

このすべてを覚える必要はありません。メソッド内で書き始めるだけdispatch_afterで、Xcode のコードセンスにより、自動生成するコードスニペットが提供されます (MartinR が質問のコメントで指摘したように)。

于 2013-09-11T08:12:37.687 に答える
1

次を使用して実行できます。

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay),
  dispatch_get_current_queue(), block);
于 2013-09-11T08:12:08.933 に答える