「ラッパービュー」は、プレビューカルーセル全体を表示するメインビューコントローラーです。
「カルーセル」自体は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サブクラスまたはカテゴリにパッケージ化できます。これに取り組んでみます。