アプリケーション作りで動作に時間制限が必要なことは色々なアイディアを出す中で自然と感じるはずです.Foundation のNSTimer を使ってカウントダウンを作ってみました.作ったことがあるけど,改めてiPhone版で書いてみました(ほとんど,Mac版と変わりませんね).


Xcode
• ~ViewController に
   •NSTimer *timer
   •NSDate *stDate
   •NSDate *nowDate
   を設置
   • タイマ表示用のIBOutlet UILabel*を設置
• ~ViewController.m
   •stDate, nowDateを初期化
   •timer = [NSTimer scheduledTimerWithTimeInterval:(1.0)
        target:self
        selector:@selector(onTimer:)
        userInfo:nil
        repeats:YES];
        でメインループに呼び出す関数と呼出し間隔を登録
     •この処理はタイマー開始時に実行するのが要
     •今回はボタンを押して実行-(IBAction)action:(id)senderに書く
     •selector:@selector(~~:)にはインターバル毎に呼び出すメソッドを指定
   •onTimer(名前は任意)を作成
    •nowDateをNSDateクラスのdateメソッドで現在時間を取得
    •nowDateのtimeIntervalSinceDate メソッドでstDateとの差分を取得
    •上記の差分から任意の数値を引く(例.timeLimit - [nowDate timeIntervalSinceDate:stDate])
    •秒単位での起動なのでtime / 60で分
    •time % 60で秒

Interface Builder
• ViewにUILabelを設置
• ~ViewControllerのUILabelとバインド
• ボタンをバインド


タイマーをメイン処理にn秒毎のメソッド呼出しを登録する事でカウントダウンや時間に応じた作業が出来ます.変数stDate はnowDate と比較する静的基準です.タイマー開始時にstDateとnowDate を初期化して時間を記録します.そして,n秒毎にNSDate クラスのtimeIntervalSinceDate でstDate とnowDate の差分をとります.カウントダウンなら(設定時間 - stDateとnowDateの差分)で出来ます.タイマーが0になったらインスタンスtimerのinvalidateメソッドでメインループから実行登録を消します.

n秒置きに現在位置を取得することやサーバとの通信を定期的に行なうにはこういったタイマーが必要になるので練習しておくと良いっすね.

Timer.zip

0 Comments: