クロックに独自クラスを導入する(4)

2010. 06. 04
前回まで『クロックの作成』を改造して独自クラスをとしていましたが、実際に試してみると色々と不都合が出てきましたので、新規に作り直します。


●プロジェクトの作成

Window-based Applicationテンプレートで、そのまま改造される方にも通じるよう、プロジェクト名は同じ『Clock』とします。


●nibファイルの編集

・背景画像の設定

320 x 460ピクセルのBackground.pngをプロジェクトのフォルダに入れXcodeのResourcesに追加します。

371

MainWindow.xibをダブルクリックしてInterface Builderを起動します。

Libraryウィンドウからドラッグ&ドロップで、背景画像となるImage VIewを設置します。

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

372

・時刻ラベルの設定

今回はラベルを4つ設定します。

画面上部に日本時間の日付と時刻、下部には(本書ではグリニッジ標準時(GMT)を設定していますが)WWDCも近いのでクパティーノの日付と時刻を表示します。

クパティーノは米国のカリフォルニア州に在り、太平洋標準時(Pacific Standard Time、PST)または西海岸標準時と呼ばれ、協定世界時(Universal Time, Coordinated、UTC)から8時間遅れになります。

また米国は夏時間を採用しており、3月第2日曜日午前2時~11月第1日曜日午前2時まで1時間進む、太平洋夏時間(Pacific Daylight Time、PDT)になっています。

LibraryウィンドウからLavelをドラッグ&ドロップでViewウィンドウに配置します。
(Inspectorウィンドウで正確に合わせますので適当に置いても大丈夫です)

1)ラベル名の変更

本書では特に設定していませんが、判別し易くするためにラベルに名前を付けようと思います。

ラベル名はInterface Builder内での設定であり、コードの記述には影響しません。

ただアウトレットの接続などで判別し易く、接続ミスも減らせます。

設定はInspectorウィンドウのIdentityパネル、Interface Builder IdentityのNameで変更できます。

375

またラベル名はDocumentウィンドウでも変更できます。

376

ただしDocumentウィンドウでの表示は(デフォルトでは)登録順に並んでおり、レイアウトの並び順とは限らないので注意してください。
(並び順が気に入らない場合は、ドラッグ&ドロップで並べ替えできます)

画面の上から下表のように名付けます。

日本時間日付Japan Date
日本時間時刻Japan Time
クパティーノ日付Cupertino Date
クパティーノ時刻Cupertino Time

2)レイアウトの調整

InspectorのSizeパネルのView Sizeで、ラベルの位置とサイズを調整します。

374

Label NameXYWH
Japan Date02032030
Japan Time05032030
Cupertino Date044032020
Cupertino Time046032020

3)フォントや背景の設定

InspectorウィンドウのAttributesパネルでフォントや背景などの設定を行います。

373

Label欄のTextは4つとも空欄にします。
(起動直後にTextが表示されてしまうため)

Fontは、日本時間はCourier NewのBold Italicの24、クパティーノ時間は同フォントのサイズ18に設定しています。

View欄のBackgroundは、4つとも色をWhiteに、透明度は82%に設定します。

377

レイアウトはこれで完了ですので、保存してXcodeに戻ります。


●ヘッダファイルの編集

ヘッダファイルにアウトレットの設定をするのですが、Clockクラスでラベルを設定している都合上、ClockAppDelegate.hとClock.hの両方を定義する必要があります。

クラスファイルの追加とClock.hの内容は『クロックに独自クラスを導入する(1)』を参照してください。

ただアクセサをプロパティ形式に書き換えますので、プロパティに関しては『クロックに独自クラスを導入する(3)』を参照してください。

『グループとファイル』ペインの『Classes』を右クリックして、コンテキストメニューから『追加』→『新規ファイル』を選択し、名前を『Clock』としてClockクラスを追加します。

Clock.hは下記のようになります。
(太字が追加した部分)

#import <Foundation/Foundation.h>

@interface Clock : NSObject {
    // タイマーとタイムゾーン
    NSTimer *timer;    // 時計更新用タイマー
    NSTimeZone *timeZone;    // タイムゾーン

    // 日時表示用アウトレット
    IBOutlet UILabel *labelTime;    // 時刻表示用ラベル(アウトレット)
    IBOutlet UILabel *labelDate;    // 日付表示用ラベル(アウトレット)
}

// 初期化&生成メソッドの宣言
- (id)initWithTimeZone:(NSTimeZone *)zone;    // タイムゾーン指定の初期化
+ (id)clockWithTimeZone:(NSTimeZone *)zone;    // タイムゾーン指定の生成

// タイムゾーンのアクセサの宣言
@property(retain)NSTimeZone *timeZone;

@end

378

ClockAppDelegate.hは下記のようになります。
(太字が追加した部分)

#import <UIKit/UIKit.h>
#import "Clock.h"

@interface ClockAppDelegate : NSObject {
    IBOutlet Clock *clock;    // 日本時間の時計
    IBOutlet Clock *clockPt;    // クパティーノ時間の時計

    UIWindow *window;
}

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

@end

379

始めにClockクラスをインポートします。

日付/時刻表示用のラベル(labelDateとlabelTime)と時計更新用タイマー(timerClock)はClock.hに移行したので不要になります。

代わりにClockクラスのアウトレットを2つ(日本時間用とクパティーノ時間用)のアウトレットを新規に加えます。



参考文献

Wikipedia/標準時

Wikipedia/太平洋標準時

Wikipedia/協定世界時

Wikipedia/夏時間

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

商品詳細を見る






コンパニオン20
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
03 | 2017/04 | 05
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 - - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

コンパニオン20
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