お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

残しておきたいものは、メンバ変数の中に。

お題【アニメーションに合わせて効果音を鳴らして、
   アニメーション終了と同時に終わらす!】

今回アニメーションを、タイマーじゃなくて
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];

で、はいできたー!


まとめ:関数を抜けても保存しておきたい値は、直接実態のほうに!