NSTimerでiPhoneのストップウォッチ的(超劣化版)なものをちょっと試す

NSTimerを使って時計アプリを作っているので、少しずつできた事をメモします。



NSTimerは定期的に処理を実行するものなので、そのままでは時計になってくれません。

とりあえず1秒毎に00:00(mm:ss)の形式でUILabelを更新したいなと思いました。

iPhoneデフォルトのストップウォッチの劣化版のように動いて、

3:00でタイマーが止まるようにしてみます。

まずは動けば、というコードなので有識者は是非アドバイスして下さい。



まずGUIの配置です。
ラベルとボタンを置いて、アウトレットとアクションを引きます。


hファイルです。NSTimerはインスタンス変数にしてます。

#import <UIKit/UIKit.h>

@interface TESTViewController : UIViewController
{
    NSTimer *myTimer;  //一定間隔でなにかする為のタイマー
    BOOL isStart;      //タイマーが動いているかのフラグ
    BOOL isFstCalled;  //タイマーがはじめて呼ばれたフラグ
    int secTime;       //秒を表す変数
    int minTime;       //分を表す変数
}
@property (strong, nonatomic) IBOutlet UILabel *timeLabel;
- (IBAction)timerStartAction:(id)sender;

@end


次にmファイルにいきます。
まずはviewDidLoad

/** ここでタイマーを初期化して別メソッドでFireします*/
- (void)viewDidLoad
{
    [super viewDidLoad];
    /** 
     *  NSTimerのインスタンスを取得するクラスメソッド scheduledTimerWithTimeInterval
     *   [引数]
     *   1.何秒毎に動くか 
     *   2.更新メソッドの呼び出し先
     *   3.更新メソッド名
     *   4.補足情報
     *   5.繰り返すかどうか
     *
     *  「fireメソッド」でタイマーをスタートし、「invalidateメソッド」でタイマーを削除する。
     */
    myTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                             target:self
                                           selector:@selector(update)
                                           userInfo:nil
                                            repeats:YES];
    isStart = NO;
    isFstCalled = NO;
}



次にアクション

/** スタートボタンで呼ばれるメソッド */
- (IBAction)timerStartAction:(id)sender {
    if (isFstCalled) {
        [myTimer fire];
        isFstCalled = YES;
    }
    isStart = !isStart;
}


最後に更新メソッドです。

/** 1秒毎に呼ばれる更新メソッド */
- (void)update{
    //タイマーがスタートしているかどうか
    if (isStart) { 
        secTime++;
        if (secTime == 60) {
            if (minTime == 2) {
                isStart = NO;
                minTime = 3;
                [myTimer invalidate];
                myTimer = nil;
            }
            else{
                minTime++;
            }
            secTime = 0;
        }
        self.timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",minTime,secTime]; 
    }
    else{
        self.timeLabel.text = [NSString stringWithFormat:@"%02d:%02d",minTime,secTime]; 
    }
}

うーん、誰かもっと楽な方法あれば教えて下さい。