7

実例に対して+500の報奨金を授与する用意があります。

Number、Pagesなどにあるような、iPadでドキュメントプレビューインターフェイスを実現するために私が知っているソースコードの例は2つだけです。

infoNgenOmniGroupFramework

他に例はありますか?infoNgenは良い単純な例ですが、コードは非常にずさんで、ひどく書かれていて、非常に整理されていません。

OmniGroup素晴らしいライブラリですが、単純なプロジェクトには複雑すぎます。

代替テキスト

アップデート

infoNgenのプロジェクトを分解し、HTMLプレビューを使用して必要最低限​​のドキュメントビューアを作成することができました。これは、ドキュメント内の情報を更新し、プレビューとの同期を維持することでかなりうまく機能するようです。今取り組むべき唯一の問題は、アプリが終了して再起動したときにドキュメントを保存することです。+500の報奨金はまだ実例で利用できますが、実例が投稿されていない限り、私は報奨金を開くつもりはありません。

4

1 に答える 1

13

「ラッパービュー」は、プレビューカルーセル全体を表示するメインビューコントローラーです。

「カルーセル」自体はUIScrollViewです。スクロールビューを作成し、pagingEnabledプロパティをに設定するだけYESです。フレームを設定して適切な寸法にレイアウトし、ラッパービューコントローラに追加します。contentSizeまた、カルーセルビューのプロパティを十分に大きく設定することもできます。これは、ドキュメントの数とさらに2つのドキュメントの幅に、カルーセルの幅を掛けて計算します。どちらかの側のドキュメントを少し表示したい場合は、ドキュメントの数にスクロールビューの幅から数ピクセルを引いた値を掛けます。

編集

実際、この問題を少しグーグルすると、これを実装する別の方法を説明するこの投稿にたどり着きました。基本的に、スクロールビューをカスタムUIViewサブクラス内にラップします。これにより、タッチがUIScrollViewに転送されます。UIScrollViewは、それと同じ幅のページに対してのみ「ページ」できるため、これが必要です。私の「側面図を数ピクセル調整する」方法を使用すると、素晴らしいプレビューが得られますが、オフセットにより、スクロール時にプレビューがジャンプします。(サンプルコードをまとめながらメソッドを試しました。今説明したように、機能しませんでした。)カスタムラッパーを使用する前に、もう1つのメソッドを試します。(コンテンツインセットが機能するかどうか疑問に思います。)

編集終了

Matthewがコメントで正しく指摘しているように、後で説明するように、実際には必要な3つのビューのみを作成することに注意してください。

ドキュメントのプレビューは、お好きなオブジェクトにすることができます。前述のように、UIWebViewを使用してHTMLをレンダリングできます。サムネイルを表すために何を使用するかに関係なく、トリックはサムネイルをレイアウトすることです。

Core Dataを使用して情報を保存している場合でも、オブジェクトの配列があると想定しています。ドキュメントのプレビューを表示するには、それらをスクロールビューに追加しますが、「X」座標に沿った適切な位置に追加します。その値を計算するには、現在のドキュメントのインデックスにスクロールビューの幅を掛けます。setFrameドキュメントプレビューの方法を使用して、この値を適用します。また、現在のプレビューの前と後のプレビューをレンダリングして、スムーズなアニメーションを作成することもできます。

レンダリングとスクロールを処理するには、ラッパーをUIScrollViewDelegateにする必要があります。デリゲートは、スクロールアニメーションが終了するたびに、スクロールビューを削除して再レンダリングするようにUIScrollViewに指示する必要があります。

「カルーセル効果」(最初のドキュメントと最後のドキュメントの間で発生するループ)を処理するには、UIScrollViewDelegateがcontentOffsetプロパティをチェックし、最後のオブジェクトにいるかどうかを判断する必要があります。最後のオブジェクトが表示されている場合は、他のオブジェクトと同じように、最初のオブジェクトを右側にレンダリングします。次に、適切なオブジェクトをスクロールすると、[scrollView scrollToRect: CGRectMake(0,0,scrollView.rect.size.width,scrollView.rect.sizeheight) animated:NO];コードを使用してシームレスに先頭にジャンプします。(最初のプレビューについても同じようにします。左側の最初と最後のプレビューをレンダリングし、必要に応じて同じように処理します)。

この答えがいくらか役立つことを願っています。できる限りコードを投稿します。

幸運を!

編集2:

考えてみると、このページングコントロール全体をUIScrollViewサブクラスまたはカテゴリにパッケージ化できます。これに取り組んでみます。

于 2011-01-03T01:00:39.837 に答える