スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーをはてなブックマークに追加

View-Based Applicationを考える

今回は、誰もが最初に目にするであろう「View-Based Application」のテンプレートをベースに、クラスファイルやリソースファイルの関係を考えていきたいと思う。

単純なビューが1枚表示されるだけのシンプルなプログラムだが、ファイルが結構多くて、最初に見た時は結構ひるんでしまう。

これらのソースやファイルの関係を表すと、次のような感じになる。
(あくまで「感じ」なので、厳密には色々違うかも・・・)

ViewBaseApplication.gif

(*)プロジェクト名が「ViewBaseTest1ViewCntroller」の場合の例

色々とごちゃごちゃしているが、基本的にはVB6や.NETのように、クラスファイルとそれに関連付くリソースファイル(.xib)で構成されている。リソースファイル(.xib)は、ビューのレイアウト(ボタンやテキストフィールドの配置)等が定義されており、クラスファイルに、それらのオブジェクトにアクセスするための変数やイベント処理を記述する。
これらのオブジェクトの関係がなにやら分かりにくい。説明するとこんな感じかな。

[A] ViewBaseTest1ViewCntrollerクラスは、UIViewControllerクラスから派生したサンプルアプリ独自のクラス。

[B] ViewController(ViewBaseTest1ViewContoller)のviewプロパティは、デフォルト状態でリソース内のビューオブジェクトを指している。プログラムで記述されているのではなく、リソースファイル内に定義されている。

[C] ビューコントローラとViewBaseTest1ViewContollerクラスが関連付いている。

[D] ビューオブジェクトとUIViewクラスが関連付いている。

[E] MainWindow.xibとViewBaseTest1ViewControllerの関係を表す。MainWiondow.xilの中にViewBaseTest1ViewControllerが埋め込まれているようなイメージ。「File's Owner」は、.xibファイル自身を指す。

[F] Windowオブジェクトのレイアウト

[G] Viewオブジェクトのレイアウト

[H]WindowとViewの描画階層を表す。リソースファイルに定義されているのではなく、UIView.addSubViewメソッドでWindowの上にViewを重ねている。

とりあえず今回はこんな所で。



このエントリーをはてなブックマークに追加
スポンサーサイト

UIViewとUIViewControllerの違いについて

iPhoneの開発を始めて最初に躓いたのは、UIViewとUIViewControllerだった。
ビューとは、ボタンなどのコントロールを配置したり、描画を行う表示領域のオブジェクト。この考え方は、VC(MFC)や.NET、VB6でも同様なので、簡単に想像できた。
しかし、UIViewとUIViewControllerはそもそも何が違うのか相当悩んだ。例えば、VC(MFC)では、CViewクラスというものがあり、イベント処理から描画処理まで全てをこなす。.NETのフォームクラスも、「コントローラ」的なものは必要ない。では、iPhoneSDKのUIViewって一体何するのもなんだ・・・?と。

結論から言うと、UIViewControllerは、1つ、または複数のViewを管理するクラス。画面のイベントを各ビューに振り分けたり、表示するビューを切り替えたりする役割。一方ビューは、各ビュー固有の描画処理を行ったり、表示構成(サブビューや親ビューの構成)を制御を行う。
まぁ、多くの処理はどっちのクラスに実装しても動作するし、切り分けも微妙なので、私は気分と雰囲気で適当に使い分けてます。

UIViewとUIViewControllerの概念図


◆メッチャ悩みました① ~viewプロパティ~

で、分かるまで時間がかかったのが、UIViewControllerのviewプロパティ。複数のビューを管理できると書いてあるから、てっきりUIViewのリストでもメンバ変数に保持しているのかと思いきや、単一のプロパティしかない!

 あれ?ビューとコントローラは必ず1対1?
 じゃあコントローラの存在意義は?

なんて思った。実際は、同時にコントロールできるオブジェクトは1つだけ。画面遷移等で切り替えが必要になったら、viewプロパティの参照先を別のビューのインスタンスに切り替えて使うのが正解だったみたい。

最初の頃は、ビューの数だけコントローラを作成していたけど、10画面ぐらい作って気がついた。ちなみに、テーブルビューとテーブルビューコントローラ等、1対1で使用する前提のビューもあるみたいだから、別に間違いでもないのかな・・・。

◆メッチャ悩みました② ~UIViewの派生クラス~

で、もう1点悩んだのが、複数ビューを扱った時のビュー固有の表示処理。例えば、UIViewControllerの派生クラスのビュー表示時イベント(viewWillAppear)で初期表示処理を行う場合のお話。ビューが複数あると、if文で切り替えて描画処理を行うのだが、それをこの関数内に書くと当然グチャグチャのコードになる。

 ビュー固有のクラスに描画処理を書きたいのに、ViewBaseApplication
 ではそんものないし・・・。

なんて考えていた。これは、UIViewクラスの派生クラスを作っちゃえばいいんですね!始めからテンプレートに含めといて欲しかったんだけど。。

***** 2011/02/19追記 *****
最近は、1つのViewControllerに対して1つのView、という構成の方が
扱い易い気がして、ViewControllerをViewの数だけ作ることが多いです。
ただし、ヘルプ画面等、処理の少ないビューを複数切り替える場合は、
1つのViewControllerで制御したりしてます。(あくまで個人的な話です)
どちらが一般的な使い方なんでしょうね?
**************************

次回は、ViewBaseApplicationを自分なりに解析してみたので、これについて書こうと思ってます。かなり独学で学んでるので、間違ってたらどなたか指摘してやってください

***** 2011/02/19追記 *****
View Based Applicationを考える
**************************


このエントリーをはてなブックマークに追加
iPhoneアプリ紹介
パズルナビ for パズドラ 2016
最強のコンボツール!
colorization-large-icon.png

スクリーンショットを読み込むとコンボを自動計算してくれるパズドラの攻略アプリです。


AirRuler
(簡易距離計)

リモートで簡単に距離を測定できるアプリ!
colorization-large-icon.png

目標地点に向けてiPhoneを傾けるだけで簡単に距離を測定できます。ゴルフの距離測定機能付きパターの代わりにも使えます。


補色残像アート
~見えない色が見えてくる~
白黒なのにカラーに見えてしまう不思議な映像を体験しよう!
colorization-large-icon.png

補色残像という目の錯覚を利用して、白黒写真がカラーに見える不思議な映像を作成できます。作成した映像は、アニメGIFに変換したり、Twitterに投稿することもできます。


タイピング革命
フリック練習はタイピング革命で!ネットランキングで盛り上がろう!
icon-l-typing.jpg

オンラインランキング上のプレイを閲覧できるリプレイ機能付き!フリック入力とローマ字入力に完全対応したタイピング練習アプリです。初心者も安心のトレーニングモード付き。

★なんと!あのAppBank様に紹介して頂きました!!
typing-sale-led.gif


簡単3Dカメラ
iPhoneで手軽に3D写真を楽しもう!平行法/交差法/アナグリフ/グラグラ3Dに対応。
icon-l-3d.jpg

2枚の写真を撮影するだけで、裸眼で立体視できる3D写真が作成できます。85円でステレオ写真もアナグリフも楽しめるのは簡単3Dカメラだけ!

プロフィール

あらきんぐ☆

Author:あらきんぐ☆
はじめまして。あらきんぐです。
4月からiPhoneを購入し、その魅力に取り付かれて、気がついたらアプリ開発の道へ!仕事でプログラム開発をしていますが、基本「動けばOK!」な適当エンジニアです。適当でもアプリは作れる!っていう事を、ブログを通じて証明していきたと思います。

最新記事
最新コメント
最新トラックバック
カテゴリ
FC2カウンター
全記事表示リンク

全ての記事を表示する

Twitter
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
アクセスランキング
[ジャンルランキング]
コンピュータ
385位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
51位
アクセスランキングを見る>>
オススメ商品
iPhone/iPodと一般オーディオを繋ぐ貴重なアイテム!
アプライドオリジナルアイテム MBB...

アプライドオリジナルアイテム MBB...
価格:3,980円(税込、送料別)

開発中級者にオススメ!「こんなことができるんだ!」と驚かされる一冊
【送料無料】iPhone...

【送料無料】iPhone...
価格:1,500円(税込、送料別)

安い!シンプル!カッコいい!
希少なiPhone対応キーボード内蔵ケース
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。