NSDateを使って何秒間に1回決まった関数を呼び出す処理です。
①呼び出す間隔と関数を設定する。
②設定後常に関数は呼ばれ続けるが、flgがFALSEのため処理は行わない。
③Startボタンが押されたらflgがTRUEになり、処理が行われる。
また、StartボタンをStopボタンに変える。
④Stopボタンが押されたらFlgをFLASEに戻す。
@implementation RootViewController
NSDate *date_now;
BOOL time_flg=FALSE;
- (void) viewDidLoad {
UIBarButtonItem *play = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(start_down:)]; // Slideshow を開始するボタン
// 何秒間に1回どの関数をコールするかを設定する。(下記記述では0.01秒間に1回onTimerがコールされる)
timer = [NSTimer scheduledTimerWithTimeInterval:(0.01)
target:self selector:@selector(onTimer:)
userInfo:nil repeats:YES];
}
/* 画面が解放される際にタイマーを停止 */
- (void)viewDidDisappear:(BOOL)animated {
[timer invalidate];
}
/* タイマーに登録されたメソッド */
-(void)onTimer:(NSTimer*)timer {
if(time_flg){
//Stopが押されるまでに毎回行う処理
[now release];
}
}
/* スタートボタンが押された時に呼ばれる */
-(IBAction) start_down:(id) sender{
UIBarButtonItem *stop = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemStop
target:self
action:@selector(stop_down:)]; // 停止ボタンを生成
self.navigationItem.rightBarButtonItem = stop;
[stop release];
time_flg = TRUE;
date_now = [NSDate date];
[date_now retain];
}
/* ストップボタンが押された時に呼ばれる */
-(IBAction) stop_down:(id) sender{
time_flg = FALSE;
UIBarButtonItem *start = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemPlay
target:self
action:@selector(start_down:)]; // 開始するボタンを生成
self.navigationItem.rightBarButtonItem = start;
[start release];
if(animetionFlg){
[date_now release];
}
animetionFlg = FALSE;
}
[0回]