こんばんは、yusuke#9です。
今回は時計アプリを作ってみます。
今回のアプリでは現在時刻の取得と、ループ処理を実装します。
今年のネタは今年のうちに。年を越さないうちに書いてしまいたい。
というわけで、プロジェクト作ります。
今回は"ClockSample"としました。
完成のイメージはこんな感じです。

Interface Builderを使わないので、
Info.plistからMain nib file base nameを削除し、
main.mの4番目の引数に@"ClockSampleAppDelagate"を
設定します。
では、ClockSampleAppDelegate.hに追加します。
labelは文字を表示するためのUILabelクラスです。
tmは1秒毎に呼び出しが行われるようにNSTimerクラスを設定します。
showClockメソッドには現在時刻を表示するロジックを組み込みます。
つづけて、.m。
まず、showClockメソッドを定義します。
日付と時間はNSDateを使います。
で現在時刻を持つNSDateクラスを取得できます。
続いて、"時:分:秒"の形にしたいので、時刻を文字列に変換するクラス
NSDateFormatterクラスを使います。
と記述して、クラスを生成し、フォーマットを定義します。
最後に、フォーマットした文字列をラベルに設定して終了です。
これでメソッドが呼び出されるたびにラベルに現在時刻が
表示されるようになります。
次に、起動時に文字盤を作成し、タイマーを開始します。
まず、背景白のウインドウを作ります。
その後、UILabelクラスを作っていきます。
オブジェクトの大きさ(320x200)を設定し、フォントサイズ(50px)を決めて、
文字揃えを中央揃え(UITextAlignmentCenter)に設定します。
ウインドウに組み込んだら、その時点での時刻を設定していしまいます。
続けて、タイマーを設定します。
これでタイマーが設定され、開始されます。
間隔を1.0、呼び出し先のオブジェクトをself、メソッドを@selector(showClock)と
することで、AppDelegateクラスのshowClockメソッドが1秒毎に呼び出されます。
これで、実装はできました。
ビルドと実行で動かしてみましょう。

現在時刻が表示されればOKです。
これで完了なのですが、最後に終了時にタイマーを終了して、変数に保管したメモリを
解放する処理を追加しましょう。
NSTimerのinvalidateメソッドを使うとタイマーが無効になります。
続けて、releaseメソッドを使ってメモリを解放します。
これで、終了時にメモリを解放して終了できます。
ではでは。
今年もあとわずか、みなさんよいお年を~
サンプルはこちら
http://yupj.jp./ameblo-binary/101231/ClockSample.zip
今回は時計アプリを作ってみます。
今回のアプリでは現在時刻の取得と、ループ処理を実装します。
今年のネタは今年のうちに。年を越さないうちに書いてしまいたい。
というわけで、プロジェクト作ります。
今回は"ClockSample"としました。
完成のイメージはこんな感じです。

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秒毎に呼び出されます。
これで、実装はできました。
ビルドと実行で動かしてみましょう。

現在時刻が表示されれば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