質問

私は、iPhone SDKを使用する方法を学ぶ時間を費やしてきました。 / を読みましたA>」カバーからカバーすると私は1つのXIB内の複数のビューの例を見たことがありません。

私が何を意味するか説明するために、ここでの簡単な構成でXIBのスクリーンショットが何であるかを私が参照しています:

altテキストはhttp:// theopensourceu。 COM / WP-コンテンツ/アップロード/ 2009/04/1-XIB-複数views.pngする

私は、私はこれを見たことがない非常に特別な理由がなければならないことを把握します。 Appleの例ではとこれまでに、複数のXIBsは単一の「ビュー」で使用されている私の測定値のすべてで(そして時にはナビゲーションコントローラまたはタブバーコントローラ、など)。その理由は何ですか?私はXIB内部の複数のビューを避けるべきでしょうか?どちらの方法にすることには利点や欠点は何ですか?

事前にありがとうございます。

役に立ちましたか?

解決

これは、メモリの最適化とロード時間の問題です。あなたは1 XIBにすべてのあなたの意見を入れた場合ときにアプリケーションが起動し、そして、それが全体をメモリにXIBをロードして、すべてのコントロールのためにすべてのオブジェクトを構築することがあり、これは時間の非自明な量になります。

代わりに、あなたは別のXIBsにあなたの意見を分ける場合は、

、初期ビューを含むだけXIBがロードされますので、あなたのアプリは、はるかに高速に起動します、そしてそれはまた、最初は少ないメモリを使用します。そして、ビューの変更、あなたは怠惰新しいビューを含むXIBをロードすることができます。初めてのビューを開いたとき、これはマイナーヒッチが発生します。あなたがが本当にはメモリ使用を最適化しようとしている場合はビューを切り替えるとき、あなたはまた、前のビューをアンロードすることができますが、これはヒッチあなたがビューを切り替えるたびに発生しますように私は代わりに、これをお勧めしませんただ、初めてのあなたは、任意のビューに切り替えます。

他のヒント

前の回答にアップした後、あなたは、同時に複数のビューをロードしたいと思い、いくつかの時間があります。ここでは例です:あなたは複数のページでレポートを表示している、あなたがそれらを管理するためにUIScrollViewのを使用するつもりです。ユーザーがレポートを閲覧して行われた場合、彼はビューを閉じますレポートを閉じます。

あなたが必要とする各ページのUIViewのと一緒にXIBでUIScrollViewのを作成します。 UIViewsはXIBの一部であるので、彼らは一斉に、レポートを開いたときに、一緒にメモリにロードされます。 2 UIViewControllersを作成し、見ていると、1がにスクロールされているページを表示するためにそれらを使用しています。ユーザーがページを移動すると、ページを保持するために離れてからスクロールされているページ上のUIViewControllerを再使用にスクロールされます。

ユーザーがページをめくっている間に

これは素晴らしい性能を保証します。これは、メモリに一度フロントまでのすべてのページをロードします。私は2つだけUIViewControllersを使用し、それはちょうどそれらにあるどのビューに変更し、それらを周りに移動します。

これはまた、1つのXIBのすべてのページを持つことの大きなメリットがあります。それは別のXIBのよりロードすることで編集しやすく、かつ迅速になります。あなたはちょうどあなたが一度にすべてのページをロードするためのメモリを持っていることを確認する必要があります。それが(例えば私の場合のように)、静的なコンテンツだ場合、それは行くのに最適な方法です。

あなたがこれを行う方法の良い例を探しているなら、私は優れた出発点であることを、このリソースを見つけます:

http://cocoawithlove.com/2009/01 /multiple-virtual-pages-in-uiscrollview.htmlする

これは、単一のXIB(Xcodeの4とiOSの4)に2つの景色を望む風景や肖像画を実装しようと誰にも警告です。単一で二つのビューを持つXIB-のための主な欠点あなただけのビューコントローラ内の単一UIOutletオブジェクトにXIBで単一UIOutletオブジェクトを接続できることを私は-ました。

だから、例えば、あなたが風景や肖像画のためのビューのためのビューのXIBを持っている場合、両方のビューが(例えば風景の中にUILabelと肖像でUILabelのように)異なる位置に同じインターフェイスオブジェクトを含みます。ビューコントローラを同時にの中の単一UILabelオブジェクトにランドスケープビューの中のとUILabelオブジェクト自分の肖像画ビューでUILabelをリンクすることはできません。

iOS版のUIViewControllerのドキュメント(のiOS 4.3)は、画面が回転するように私はプログラム的に二つのビューを切り替えることにより、カスタムの風景や肖像画のビューを実装することができることを示唆してます。

私は、これに失望を見つけます

これを行う方法を見つけ出すためにかなりの時間を過ごした後、私は単一のビューコントローラに取り付けられた2つの異なるビューを持つことが可能であることを発見していますが、両方のビューのために店舗を持っている必要があります。例えば、私のビューコントローラでは、私は2つのUILabelオブジェクト(;風景ビューでUILabelに接続する一つの肖像ビューでUILabelに接続するためのもの)を有します。私のコードでは、私は風景のコンセントを更新するたびに、私はまた、肖像画風景を更新します。

非常にエレガントではないが、それは動作しますが、これは一つの画面で単純なビューのためであるとして、それはコントローラとビューで重複すべてのUIオブジェクトを持っている持ってあまりにも多くのメモリを使用しません。私はそのように再びそれをやったプロジェクトを作成していないだろうが、それは、そのプロジェクトのために良い十分な回避策だった。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top