残しておきたいものは、メンバ変数の中に。
お題【アニメーションに合わせて効果音を鳴らして、
アニメーション終了と同時に終わらす!】
今回アニメーションを、タイマーじゃなくて
block(ブロック)というものを使って処理していたので、
タイマーのメソッドの中に書くことができない。
しゃーない。新しくタイマーを作ろう!
//■音開始
_mapSoundPlayTimer = [NSTimer
scheduledTimerWithTimeInterval:0.7
target:self
selector:@selector(mapSoundPlay:)
userInfo:nil
repeats:YES];
(タイムインターバルが0.7になってるのは、アニメーション表示も0.7秒ごとだから)
で、こう↓つながる。
//マップサウンドタイマーからくるメソッド(開始)
- (void)mapSoundPlay:(NSTimer*)timer{
[_mapSound play];
NSLog(@"マップサウンドすたーと");
}
ここまで、音を鳴らすのは簡単。
で、今度、これを、アニメーション終了と同時に終わらせたい!
んー..
スタートとストップはひとつのタイマーではかけれんけ、
停止用のタイマー作成する!
//音停止
_mapSoundStopTimer = [NSTimer
scheduledTimerWithTimeInterval:(float)self.maxNum*0.7+0.7
target:self
selector:@selector(mapSoundStop:)
userInfo:nil
repeats:NO];
で、こいつに[_mapSound stop];を実行させれば、
完璧ですな。(キラ)
とか思ってたのですが、
時間設定が...うまく...いかない!
ちゃんとアニメーション終了の時間(maxNum)と同じはずなのにー!
なんでー!
と思って、ひとまずトイレにいったら、
ひーらーめーいーたー(°▽°)
メンバ変数の使い方だー。
前にfor文の中でもメンバ変数使ったんやけど、
外からさわるしーと思って
self.て使ってて、
なんか反映されないなーーて思ってたときに教わった、
「保持したいものはselfじゃなくて実態(_)のほうにぶっこむ!」
てやーつ。
ちゃんと前のほうで_maxNumに値入れてあげてるのを確認して、
//音停止
_mapSoundStopTimer = [NSTimer
scheduledTimerWithTimeInterval:(float)_maxNum*0.7+0.7
target:self
selector:@selector(mapSoundStop:)
userInfo:nil
repeats:NO];
で、はいできたー!
まとめ:関数を抜けても保存しておきたい値は、直接実態のほうに!