iOSのウィンドウやビューの基礎クラス

iOSアプリケーションのUI絡みのクラスは、種類が多いので特にiOSアプリ開発をはじめてから日の浅い方々は全体像の把握に苦労していることが多いように見えます。アップルも公式ドキュメントを沢山用意していますが、この部分は量が非常に多く全体像が見えていないうちは目的の情報を探すのにも一苦労なので、基礎的な部分だけをまとめておこうと思います。

重要なクラス

スクリーン(UIScreen)

デバイスの画面を表すクラスです。一番ハードウェアに近い部分で、具体的には画面サイズを取得する目的で使う事が多いと思います。

CGRect screenSize = [[UIScreen mainScreen] bounds];

ウィンドウ(UIWindow)

WindowsというOSがあるように、ウィンドウは近年のOSでは極めて一般的なUIの単位の一つです。iOSも、アプリケーションはウィンドウを持っていますが、通常は1つのウィンドウがフルスクリーンで起動している状態になるので、ウィンドウという単位を意識することは少ないかもしれません。ボタンやラベル等はウィンドウの上に配置されています。
ウィンドウは複数つくることもできますが、外部出力等の場合等以外はウィンドウを複数作らなければ行けない状況は少ないです。また、Xcodeのテンプレートを使ってアプリケーションを作った場合は、ウィンドウの生成管理部分は既にテンプレートで実装されているので、大抵の場合はウィンドウ部分を実装する必要はないかもしれません。
MacアプリやWindowsアプリでは機能の違う画面は別のウィンドウとして実装して切り替えて表示することがありますが、iOSアプリの場合基本的に画面遷移の際にウィンドウを切り替える事はしません。画面遷移は後述するビューコントローラを使って管理します。

ビュー(UIView)

ウィンドウの上に載っているボタンやラベル等のパーツがビューです。ボタンをビューと呼ぶのに違和感がある人もいるかもしれませんが、ボタンもスライダーもテーブルも、全部ビューのサブクラスということになってます。
ビューは自分自身の中にさらに別のビューを載せて階層構造を作る事が可能で、例えばボタンもよく見ると背景や外枠の上にラベルが載る形で構成されています。

UIView* container = [[[UIView alloc] initWithFrame:parentFrame] autorelease];
UILabel* label = ...略...;
[container addSubview:label];

ビューコントローラ(UIViewController)

ウィンドウの上にビューを貼付けていって、それの可視や位置を調整すればユーザインターフェイスや画面遷移はいくらでも作れるのですが、それをよりエレガントに管理するためのクラスがビューコントローラです。基本的には画面切り替えの管理に使うものですが、他にもデバイスが回転したときにそれにあわせてビューを回転させる処理等もビューコントローラが担当します。
iPhoneアプリの場合は、基本的には一つのビューコントローラで一つの画面を管理する形になります。なので、ビューコントローラを使って複数の画面を切り替えるような場合は、複数のビューコントローラを用意します。
ビューコントローラの考え方自体はiOSに限った話ではなく、前述の通りビューコントローラはなくてもUIを作る上で問題はないのですが、iOSではビューコントローラを使って画面遷移を管理すると、簡単に画面切り替えのアニメーションをつける事ができ、「戻る」機能等もOS側で勝手に管理してくれるようになるので、リッチなアプリケーションを作るには欠かせないものです。

参考

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です