クロックの作成

2010. 05. 21
(つい言語環境の話を先にしてしまいましたが)『基礎からのiPhone SDK 改訂版』の本書では日時情報関連のクラスの紹介があって、アプリの制作、改良という流れになっていますが、ウェブブラウザの時と同じく『アプリ制作 → 中身の紹介』とした方が分かり易いかと思うので、先にアプリを作ります。


●サンプルアプリケーションの概要

335

パーツは背景画像と日時を示すラベルが2つのみで、現在日時を取得して表示するだけのシンプルなデジタル時計です。


●プロジェクトの作成

Window-based Applicationテンプレートで、プロジェクト名を『Clock』とします。

321


●nibファイルの編集

・背景画像の設定

今回の背景画像はステータスバー分を考慮して320 x 460ピクセルとし、Background.pngとして用意しました。

Background.pngファイルをプロジェクトのフォルダに入れ、XcodeのResourcesに追加します。

322

次にnibファイル MainWindow.xibをダブルクリックしてInterface Builderを起動します。

Libraryウィンドウからドラッグ&ドロップで、背景画像となるImage VIewと、日付と時刻を表示するLabelを2つ設置します。

LibraryウィンドウからImage Viewをドラッグ&ドロップでViewウィンドウに配置し、InspectorウィンドウのImageでBackground.pngを選択します。

323

・時刻ラベルの設定

本書ではLabelは画面上部に配置していますが、ここでは画面下部に配置します。

Libraryウィンドウからドラッグ&ドロップでLabelを置き、ドラッグでサイズや位置を決めますが、マウス操作では幾分不正確な面もありますので、きっちり設定する場合はInspectorのSizeで確認・補正すると良いでしょう。

ここでは320 x 40の矩形を下端に配置しています。

324

Attributesパネルで文字や背景の設定をします。

LabelのText欄はデフォルトで『Label』と入っていますが、そのまま残しておくとアプリケーション起動時に時刻が表示されるまでの間『Label』と表示されてしまうので、各種設定が済んだら削除しておきましょう。

Layoutはセンタリングし、Fontは好みの種類・サイズにします。
(ここではTimesNewRomanのBold Italic、サイズ24)

Viewは、Backgroundで背景色をWhiteの半透明(90だとアレなので62%に設定)にしました。

325

・日付ラベルの設定

時刻ラベルに重ならないように、320 x 30の矩形をすぐ上に配置します。

326

LabelとViewの設定は、フォントサイズを18にした以外は同じです。

327

これでパーツのレイアウトは完了です。

328

・アウトレットの宣言

Xcodeに戻ってClockAppDelegate.hを開き、時刻・日付ラベルのアウトレットを設定します。
(太字が追加した部分)

#import <UIKit/UIKit.h>

@interface WebAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UILabel *labelDate;    // 日付表示
    IBOutlet UILabel *labelTime;    // 時刻表示

    UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

329

・アウトレットの接続

ファイルを保存し、Interface BuilderのDocumentウィンドウでClock App Delegateを選択し、InspectorウィンドウのConnectionsパネルのアウトレットをViewウィンドウのラベルに接続します。

330

331

これでインターフェイスの作成は終了です。


●タイマーの作成

・タイマーの宣言

一定時間間隔で、現在時刻を取得しラベルに出力するタイマーを作成します。
(本書では時報用タイマーのオブジェクト宣言も一緒に行っていますが、すぐには利用しないので後で改めて宣言します)

XcodeでClockAppDelegate.hを開き、タイマーオブジェクトを宣言します。
(太字が追加した部分)

#import <UIKit/UIKit.h>

@interface WebAppDelegate : NSObject <UIApplicationDelegate> {
    IBOutlet UILabel *labelDate;    // 日付表示
    IBOutlet UILabel *labelTime;    // 時刻表示
    NSTimer *timerClock;    // 時計更新用タイマー
    UIWindow *window;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

332

・タイマーの実装

例によって、本書ではapplicationDidFinishLaunching:メソッドですが、application:didFinishLaunchingWithOptions:メソッドを使っています。

アプリケーションの起動処理完了後、1秒間隔で作動し、タイマー内部でupdateClock:メソッドを呼び出し、アプリケーション終了まで繰り返します。
(太字が追加した部分)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    // Override point for customization after application launch

    timerClock = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateClock:) userInfo:nil repeats:YES];

    [window makeKeyAndVisible];

    return YES;
}

333


●日時の取得と表示

最後に現在の日時の取得と表示を行うupdateClock:メソッドを実装します。

- (void)updateClock:(NSTimer *)theTimer {
    // 現在の日時の取得とフォーマッタの生成
    NSDate *date = [NSDate date];
    NSDateFormatter *form = [[NSDateFormatter alloc] init];

    // 日付の文字列をラベルにセット
    [form setDateStyle:NSDateFormatterFullStyle];
    [form setTimeStyle:NSDateFormatterNoStyle];
    labelDate.text = [form stringFromDate:date];

    // 時刻の文字列をラベルにセット
    [form setDateStyle:NSDateFormatterNoStyle];
    [form setTimeStyle:NSDateFormatterMediumStyle];
    labelTime.text = [form stringFromDate:date];

    [form release];
}

※2010.5.24訂正
NSDateFormatterオブジェクトのformを解放する記述が抜けていました。
お詫びして訂正させていただきます。

334

現在の日時をNSDateクラスのdateメソッドで取得し、ラベルに表示するフォーマット(書式)をNSDateFormatterクラスのオブジェクトformで設定し、ラベルに出力しています。


●ビルドと実行

ビルドして実行するとあることに気付きます。

335

環境設定で書式を日本に設定していると、ラベル表示も日本語になります。

Times New Romanフォントは日本語に対応していませんので、非対応の文字はデフォルトの『ヒラギノ角ゴ Pro N W6』に置き換えられています。

本書ではこの後ロケールの変更やアラームの設定などありますが、ここまでの分を解説してから機能の追加を追って説明します。



参考文献

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






bose_soundsport_free
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
09 | 2017/10 | 11
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

bose_soundsport_free
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR