2011年4月27日水曜日

UIViewController(Interface Builderを使わない)

ビューコントローラー(UIViewController)は画面の回転のサポートや様々なアニメーション等を自動で管理してくれるとても便利で、基本的なクラスです。UINavigationController, UITabBarController等がサブクラスとなっています。

画面の回転に対応したテキストを表示する画面を作ってみます。
UIViewControllerのサブクラスを作成します。
XcodeのメニューからでFIle-New-New File...を選択します。
UIViewController subclassを選択しし、クラスを作成します。




UIViewControllerでの初期化コードは -(void) loadView メソッドにて実施しますが、デフォルトではコメントアウトされているので、コメントアウトを外してコードを追加していきます。

テキストを表示するクラスとしてUITextViewを使います。以下が初期化コードです。

CGRect rect = [[UIScreen mainScreen] applicationFrame];
textView = [[UITextView alloc] initWithFrame:rect];

表示するテキスト内容とカラー、そして編集不可としておきます。

textView.text = @"test UIViewController.";
textView.textColor = [UIColor grayColor];
textView.editable = NO;

作成したUITextViewをUIViewControllerが保持しているViewと差し替えます。

self.view = textView;

全体的にみると、loadViewメソッドは以下のような感じになります。
textView変数はヘッダにインスタンス変数として UITextViewの型で定義されています。

- (void)loadView
{
    //create textview.
    CGRect rect = [[UIScreen mainScreen] applicationFrame];
    textView = [[UITextView alloc] initWithFrame:rect];
    
    textView.text = @"test UIViewController.";
    textView.textColor = [UIColor grayColor];
    textView.editable = NO;
    
    //add to view.
    self.view = textView;
}
このままだと、画面の回転(オリエンテーション)には対応できていません。iPhoneの向きに応じて画面の内容の向きを変更するには、以下のメソッドの戻り値を変更します。iPhoneの向き(上、下、右、左)に応じて対応させたい場合に「YES」を返却するようにしますが、全ての向きに対応させるには無条件に「YES」を返却します。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
//    return (interfaceOrientation == UIInterfaceOrientationPortrait);
    return YES;
}

これで、UIViewControllerのサブクラスの作成は終わりです。
次に作成したクラスを生成し、Windowに付け加える処理を追加します。
だいたい、以下のようなコードになると思います。

//create MyViewController.
    myViewController = [[MyViewController alloc] init];

    //add to view.
    [_window addSubview: myViewController.view];

実行結果。縦向き、横向きに対応出来ています。
※シュミレータでiPhoneの向きを変更するには「コマンド + → 」等で向き変更可能です。

以下、縦向き。

以下、横向きになります。横向の際にアニメーションが実行されますが、このアニメーションも自動で行われます。

0 件のコメント :

コメントを投稿