AS3ではできたけどとObjective-Cでタイマー処理ってどうやんの?
こんにちは、佐藤です。
最近はちょこっとiPhoneアプリを制作していたりしているのですが、なかなかObjective-Cにはなれないです。そんなこんなでちょっとおなか痛いです。
FlashつくってるひとでiPhoneアプリやってる人、やりたい人も今ではたくさんいると思います。
僕が制作している中で覚えたことをメモ的ですがあげていきたいと思います。
最初はタイマーについて書いてみようかと。
簡単な例ですが、1秒(1000ミリ秒)ごとにメソッドを実行してみます。
AS3の場合:
Timerインスタンスを作成して、インスタンスが発信するTimerEventにリスナを設定する。
var timer:Timer = new Timer(1000, 0); timer.addEventListener(TimerEvent.TIMER, this.timerHandler); timer.start(); public function timerHandler(event:TimerEvent):void { trace("Timer処理"); //停止するときは var timer:Timer = event.target as Timer; timer.removeEventListener(event.type, arguments.callee); timer.stop(); }
Objective-Cの場合:
NSTimerクラスにメソッドを登録する
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerHandler:) userInfo:nil repeats:YES]; -(void)timerHandler:(NSTimer*)timer { NSLog(@"Timer処理"); //停止するときは [timer invalidate]; }
ちょっと比較してみます。
- 繰り返し設定
AS3:Timerはリピート回数を指定できる(0を指定すると無限)
Objective-C:repeatsパラメタで指定。ループ回数制限はループ処理の中で回数カウントしてハンドリングしないといけない模様。
- 繰り返すメソッドの指定
AS3:イベントハンドラにスコープとメソッドを渡してあげます。
Objective-C:targetパラメタにスコープ(AS3でのthisはselfと書くみたいです)、selectorパラメタにメソッドを指定。 - 停止方法
AS3:Timerインスタンスのstopメソッドをよぶ。
Objective-C:NSTimerクラスのinvalidateメソッドをよぶ。
ちょっと見つけました。
タイマーをつかって指定秒数後に一回だけ処理を実行したいときは便利そうなのをみつけました。
AS3だと
var timer:Timer = new Timer(1000, 1); timer.addEventListener(TimerEvent.TIMER_COMPLETE, timerHandler); timer.start();
Objective-Cでは以下のように書けてちょっと便利そうです。
[self performSelector:@selector(timerHandler) withObject:nil afterDelay:1.0]; -(void)timerHandler { NSLog(@"Timer実行されたよ。一回だけだよ"); }
まだまだ全容がよくつかめていなく、突っ込みどころ満載ですがこんなところで。
もうちょっと勉強したらまた書いてみたいと思います。
ではでは!