3

私は Cocos2D を使用して iOS アプリを作成していますが、少し遅れて何かを実行したい状況がたくさんあるので、次のようなコード行を使用します。

[self scheduleOnce:@selector(do_something) delay:10];

ただし、発生するのdo_somethingは 1 行のコードだけです。関数をスケジュールする行で関数を定義する方法はありますか?

私がjQueryでプログラミングしていたとき、これは私が達成しようとしているものと似ています:

$("a").click(function() {
  alert("Hello world!");
});

function() がどのように定義されているか見てください。Objective-Cでこれを行う方法はありますか? また、これに名前はありますか?将来の検索のために?これを説明するのは難しいと思うからです。

4

3 に答える 3

6

dispatch_after一定時間後にブロックを実行するために使用できます。

int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
    /* code to be executed on the main queue after delay */
});

私はそれをタイムディスパッチブロックと呼びます。

編集:それを一度だけディスパッチする方法。

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    /* code to be executed once */
});

だからあなたの場合:

static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
    int64_t delayInSeconds = 2.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        /* code to be executed on the main queue after delay */
    })
});
于 2012-11-04T00:22:56.500 に答える
1

Cocos2Dを使用しているので、CCDelayTimeメソッドを利用し、それをCCSequenceで組み合わせて、目的の効果を実現することもできます。次のようなもの:

id delayAction = [CCDelayTime actionWithDuration:10];
id callSelector = [CCCallFunc actionWithTarget: self selector: @selector(do_something)];
[self runAction:[CCSequence actionOne:delayAction two:callSelector]];

または、CCCallBlockを使用して、do_somethingに別のメソッドを作成する必要がなく、ブロックに入れることもできます。

[self runAction:[CCSequence actionOne:delayAction two:[CCCallBlock actionWithBlock:^{
// do something here
           }]]];
于 2012-11-04T09:25:09.727 に答える
0

メソッド「do_something」を次のように宣言する必要があると思います

-(void)do_something {
    //Your implementation here
}

この場合、do_somethingメソッドにできるだけ多くの行を追加できます。

@selector(do_something)は、クラスのメソッドを実行するためのコマンドです。

于 2012-11-04T00:27:12.083 に答える