NSTimerの概念。

カウントダウンタイマーを付けたい。
タイマーを使うにはNSTimerを使うらしい。

参考にしたサイト
【iOS】タイマー(NSTimer)を実装:iPhoneアプリ内にカウントダウンタイマーを実装する | 日本VTR実験室
iOS 7 でカウントダウンタイマーを実装する – Qiita

はじめ、NSTimer自体が一定時間ごとにカウントアップしたり、カウントダウンしたりするものだと思っていた。
しかしながら、色々とサイトを見ていると、NSTimer自体は一定時間ごとにアクションを起こす為の物とわかった。

概念を理解するのに思い込みは大敵だ。

サンプルコード

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *timeHyouji;//画面に表示するためラベルとアウトレット接続
@property (nonatomic)         int time;//カウントダウンの時間(回数)の設定を入れる
@property (nonatomic, strong) NSTimer* countdown_timer;//
@end
@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
        self.countdown_timer = [NSTimer scheduledTimerWithTimeInterval:1 //1秒ごとに
                                                            target:self 
                                                          selector:@selector(update) //update関数を呼び出す
                                                          userInfo:nil
                                                           repeats:YES];//yesでくりかえします。
    self.time = 30;//1秒を30回なので30秒になる。

}

- (void)update //呼ばれる関数
{
    self.timeHyouji.text = [NSString stringWithFormat:@"%d",self.time];//数字を表示
    
    if (self.time <= 0.0) {//もしtimeが0以下ならば
        [self.countdown_timer invalidate];//タイマーを止める。
    }
    else {//そうでなければ
        self.time--;//timeから1を引く
    }
}

重要なのは

        self.countdown_timer = [NSTimer scheduledTimerWithTimeInterval:1 //1秒ごとに
                                                            target:self 
                                                          selector:@selector(update) //update関数を呼び出す
                                                          userInfo:nil
                                                           repeats:YES];//yesでくりかえします。

ここの部分。
これが呼び出されるとタイマーがスタートする。
viewDidLoadメソッドに入れておけば表示とともにカウントがスタートする。

こちら
【iOS】時間を指定して処理をする場合はNSTimerを使う | AdMax Tech Blog
に書いてあるように

ある画面に何分以上いたら「シェアしてよ」のアラートを出す
ある一定時間同じ画面にいたら画面描画を変える

などの場合には良さげです。

このサンプルコードの場合は起動したらすぐにNSTimerが作動し、1秒毎にupdateメソッドが呼び出されラベルの数値が書き換えられて0になると止まる。

NSTimerは設定時間ごとにメソッドを呼び出すだけなのでカウントダウンや、タイマーなどの仕組みは呼び出されるメソッド側で考えなければならない。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です