こんばんは、yusuke#9です。

今回は時計アプリを作ってみます。
今回のアプリでは現在時刻の取得と、ループ処理を実装します。
今年のネタは今年のうちに。年を越さないうちに書いてしまいたい。

というわけで、プロジェクト作ります。
今回は"ClockSample"としました。

完成のイメージはこんな感じです。
iPhoneでゲームとか作ってます-説明

Interface Builderを使わないので、
Info.plistからMain nib file base nameを削除し、
main.mの4番目の引数に@"ClockSampleAppDelagate"
設定します。



では、ClockSampleAppDelegate.hに追加します。

@interface ClockSampleAppDelegate : NSObject  {
UIWindow *window;

UILabel* label; // 追加
NSTimer* tm; // 追加
}


- (void)showClock; // 追加

@end

labelは文字を表示するためのUILabelクラスです。
tmは1秒毎に呼び出しが行われるようにNSTimerクラスを設定します。
showClockメソッドには現在時刻を表示するロジックを組み込みます。

つづけて、.m
まず、showClockメソッドを定義します。

// 時計の文字盤を表示
- (void)showClock{
NSDate *d = [NSDate date];
NSDateFormatter* f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"HH:mm:ss"];
label.text = [f stringFromDate:d ];
[f release];
}


日付と時間はNSDateを使います。
[NSDate date]

で現在時刻を持つNSDateクラスを取得できます。
続いて、"時:分:秒"の形にしたいので、時刻を文字列に変換するクラス
NSDateFormatterクラスを使います。
	NSDateFormatter* f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"HH:mm:ss"];

と記述して、クラスを生成し、フォーマットを定義します。

最後に、フォーマットした文字列をラベルに設定して終了です。

これでメソッドが呼び出されるたびにラベルに現在時刻が
表示されるようになります。



次に、起動時に文字盤を作成し、タイマーを開始します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

// Override point for customization after application launch.

// ここから
// ウインドウ生成
window = [[UIWindow alloc]initWithFrame:CGRectMake(0, 0, 320, 480)];
window.backgroundColor = [UIColor whiteColor];

// 文字盤の定義
label = [[UILabel alloc]init];
label.frame = CGRectMake(0, 0, 320, 200);
label.font = [label.font fontWithSize:50];
label.textAlignment = UITextAlignmentCenter;
[window addSubview:label];
label.center = CGPointMake(160, 250);

// 現在時刻を設定
[self showClock];

// タイマーを開始
tm = [NSTimer
scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(showClock)
userInfo:nil
repeats:TRUE
];

// ここまで


[window makeKeyAndVisible]; // selfを取る

return YES;
}



まず、背景白のウインドウを作ります。
その後、UILabelクラスを作っていきます。
オブジェクトの大きさ(320x200)を設定し、フォントサイズ(50px)を決めて、
文字揃えを中央揃え(UITextAlignmentCenter)に設定します。
ウインドウに組み込んだら、その時点での時刻を設定していしまいます。

続けて、タイマーを設定します。

    [NSTimer
scheduledTimerWithTimeInterval:間隔(秒)
target:呼び出し先オブジェクト
selector:呼び出し先メソッド
userInfo:nil
repeats:繰り返すかどうか
];

これでタイマーが設定され、開始されます。
間隔を1.0、呼び出し先のオブジェクトをself、メソッドを@selector(showClock)
することで、AppDelegateクラスのshowClockメソッドが1秒毎に呼び出されます。

これで、実装はできました。

ビルドと実行で動かしてみましょう。

iPhoneでゲームとか作ってます-結果

現在時刻が表示されればOKです。



これで完了なのですが、最後に終了時にタイマーを終了して、変数に保管したメモリを
解放する処理を追加しましょう。

- (void)dealloc {
[window release];

[tm invalidate]; // タイマーを無効に
[tm release]; // tmのメモリの解放
[label release]; // labelのメモリの解放

[super dealloc];
}


NSTimerのinvalidateメソッドを使うとタイマーが無効になります。
続けて、releaseメソッドを使ってメモリを解放します。

これで、終了時にメモリを解放して終了できます。

ではでは。
今年もあとわずか、みなさんよいお年を~

サンプルはこちら
http://yupj.jp./ameblo-binary/101231/ClockSample.zip