InterfaceBuilderを使わずに作る!
業務でiPhoneアプリを開発することになったのでここ1週間ほどひたすらiPhoneSDKと格闘中でなんか予定が狂いっぱなしなのですが、やっと情報がまとまりだしてブログに書けるかなという感じになってきました。
色々調べる中で一番悩んだのがInterfaceBuilderです。慣れていないこともありますが、複雑な遷移や画面内の細かい調整をしようとするとかなりイラっとします。ラベルのフォントサイズとか固定で表示できないし。
で、iアプリみたいに全てコードで書きたいと思ったのですが、コードのみで解説されている記事があまりないのがまた悩ましい。。ということで、ここではIBを極力利用せずに全てコードで作る方法をまとめて行きたいと思います。今回はViewの表示です。
1. 新規プロジェクトでWindow-Based Applicationを選択します。(sample01)
2. 新規ファイルでUIView subclassを追加します。(MyView)
3. Viewを生成してwindowのSubViewとして登録します。
4. Viewの初期化メソッド内でViewのUIを設定します。
sample01AppDelegate.h
#import <UIKit/UIKit.h> @class MyView; @interface sample01AppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; MyView *myView; } @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) MyView *myView; @end
sample01AppDelegate.m
#import "sample01AppDelegate.h" #import "MyView.h" @implementation sample01AppDelegate @synthesize window, myView; //アプリ実行時に呼ばれる - (void)applicationDidFinishLaunching:(UIApplication *)application { //Viewを生成 MyView *mv = [[MyView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.myView = mv; [mv release]; //SubViewに設定してwindowを表示する [window addSubview:myView]; [window makeKeyAndVisible]; } - (void)dealloc { [myView release]; [window release]; [super dealloc]; } @end
MyView.h
#import <UIKit/UIKit.h> @interface MyView : UIView { } @end
MyView.m
#import "MyView.h" @implementation MyView //Viewの初期化時に呼ばれる - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { //背景色を設定 self.backgroundColor = [UIColor lightGrayColor]; } return self; } //ピクセルごとの描画処理を行う場合にはここに記述する //Viewが再描画されると呼ばれる - (void)drawRect:(CGRect)rect { } - (void)dealloc { [super dealloc]; } @end
しばらくはiPhoneネタが続きます。