2011年4月25日月曜日

UIWindowの生成(Interface Builderを使わない)

UIWindowはiPhoneアプリケーションでの基本的なキャンバスのようなものです。
ですので、画面に何かを描画するには、UIWindowの生成は必ず必要な作業でありiPhoneアプリケーションではUIWindowの上にUIView等のクラスを配置していくイメージになります。また、様々な描画や画面の回転をサポートさせるにはUIViewContorollerを利用します。(ここでは、UIViewControllerに関しては記述しません)
ステータスバーを含まないWindowの生成
UIWindowの生成は以下のように、CGRect構造体でiPhoneが持つウィンドウの領域を表す値を設定します。

//CGRect構造体の作成
CGRect rect = [[UIScreen mainScreen] applicationFrame];
//UIWindowの生成
_window = [[UIWindow alloc] initWithFrame:rect];

ここで、

CGRect rect = [[UIScreen mainScreen] applicationFrame];

はiPhoneのステータスバー部分を含まない領域を返します。ステータスバーを常に表示しているアプリケーションの場合は
このような感じになるかと。
しかし、実行してみると分かりますが、このまま実行すると以下のようになります。




ステータスバーの20ピクセル分下にずれて表示されてしまっています。ステータスバーが表示されている場合はステータスバーの左下(x,y)=(0,20)が原点になるのが原因です。以下のように調整します。

//CGRect構造体の作成
CGRect rect = [[UIScreen mainScreen] applicationFrame];
//原点を調整rect.origin.y = 0;
//UIWindowの生成
_window = [[UIWindow alloc] initWithFrame:rect];
ステータスバーを含むWindowの生成
ステータスバーを含む全画面分の領域を取得したい場合は、

CGRect rect = [[UIScreen mainScreen] bounds];

となります。
実装イメージ
これらの処理はプロジェクト作成後に自動生成されるDelegateクラスのdidFinishLaunchingWithOptionsメソッドに記述します。

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    //CGRect構造体の作成    
CGRect rect = [[UIScreen mainScreen] applicationFrame];    
//原点を調整    
rect.origin.y = 0;        
//UIWindowの生成    
_window = [[UIWindow alloc] initWithFrame:rect];        
//UIViewの生成    
myView = [[UIView alloc] initWithFrame:rect];    
myView.backgroundColor = [UIColor whiteColor];    
//Viewの追加   
 [_window addSubview:myView];    
[self.window makeKeyAndVisible];    
return YES;
}

0 件のコメント :

コメントを投稿