2009-05-06 6 views
4

UIKitリファレンスによると、UIViewはUIWindowのスーパークラスですが、この親子関係にもかかわらず、UIWindowは実際にUIViewを管理します。これは私にとって珍しいようです。なぜUIWindowは子であり、またUViewの親ですか?

誰でもソフトウェアデザインの点でこの意味が分かりますか?

多くのありがとうございます。

編集:
私はiPhoneプログラミングガイドの関連する段落を読みました。しかし、私は彼らが逆を行う理由を見ることができませんでした:UIWindowをUIViewの親にしましょう。アップルがこのようにクラス階層を設計するように強制した何かがあったに違いない。 UIWindowクラスはその継承であるについてのMac OS Xの開発を経験した

+0

あなたは親子の概念とサブクラス/スーパークラスの概念を混同しませんか? UIWindowsはUIViewのサブクラスですが、その "子"ではありません。 UIWindowには子としてのUIViewがあります。 – tml

答えて

5

http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.htmlから

ことの一つは珍しいかもしれません。 Mac OS Xでは、NSWindowの親クラスはNSResponderです。 iPhone OSでは、UIWindowの親クラスはUIViewです。したがって、iPhone OSでは、ウィンドウもビューオブジェクトです。その親子関係にもかかわらず、iPhone OSのウィンドウはMac OS Xと同じように扱われます。つまり、通常、UIWindowオブジェクトのビュー関連のプロパティを直接操作しません。

EDIT:

UIViewのは、一般的なものですUIWindowはより具体的なている間(クラスの管理や窓を調整するオブジェクトを定義します(あなたが望むすべてのタイプを作成するために使用し、そのプロパティにアクセスする一般的な方法を提供します。)アプリケーションが画面に表示されます)。

私は少し曖昧ですが、私はリンゴだけがこの階層の正確な理由を知っていると思います。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/cl/UIWindow

UIWindowクラスは、管理や窓にスクリーン上のアプリケーション表示座標(ウィンドウとして知られている)オブジェクトを定義します。ウィンドウの2つの主な機能は、ビューを表示するための領域を提供し、ビューにイベントを分散することです。

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

UIViewクラスを使用すると、ビューのすべての種類を作成するために使用し、そのプロパティにアクセスする一般的な方法を提供します。たとえば、サブクラスに専用の初期化子がない場合は、initWithFrame:メソッドを使用してビューを作成します。 frameプロパティは、スーパービュー座標のビューの起点とサイズを指定します。すべてのビューの座標系の原点は左上隅にあります。

UIViewオブジェクトは、サブビューのネストされた階層内のUIWindowオブジェクト内に配置されます。ビュー階層の親オブジェクトはスーパービューと呼ばれ、子はサブビューと呼ばれます。ビューオブジェクトは、そのスーパービューを囲む矩形領域を要求し、その領域内のすべての描画を担当し、その領域内で発生するイベントを受け取る資格があります。兄弟ビューは問題なくオーバーラップでき、複雑なビューの配置が可能です。

0

したがって、すべてのUIViewは、(継承された)プロパティと動作がウィンドウにのみ意味があるためです。それは間違っている。

他の方法では意味があります。ウィンドウは、ビューの上に動作を追加します。したがって、それは描くことができ、境界を有し、他のビューを含むことができる。しかし、例えばディスプレイにレンダリングする方法を知ってこれを拡張する。

MacOS Xでは、NSWindowsはビューではありません。それらはcontentViewと呼ばれる "ルートビュー"を含んでいます。 iOSウィンドウは、NSWindow +そのルートビューの構成です。

0

メインウィンドウのルートビューを含む各通常のUIViewには親ビューが必要です。 UIWindowはUIViewを継承し、ビュー階層内で親ビューの役割を実行します。 UIWindowは通常のビューではなく、UIViewのインターフェイスから独自のメソッドの実装を持っています。

関連する問題