2

一連の画像を水平方向にスクロールできるように、水平スクロールを使用してアプリを作成しようとしています。これに関する WWDC セッション 104 のビデオを見たところ、彼らは興味深いアプリを作成していましたが、その基本を非常に迅速に説明してくれました。

UIScrollView の使用と、ページングを有効にする必要があることを理解しています。その後、スクロールビューのサブビューとしてさらにビューを追加する必要があると言われていますが、その方法がわかりません。また、これらのビューに画像を追加する方法も明確ではありません。

あなたがおそらく言うことができるように、私はこれにかなり慣れていないので、助けていただければ幸いです。

4

3 に答える 3

12

UIImageViewを調べたいとします。画像を保持するためのビューです。

画像を追加するときは、次のように (おそらくinitWithFrame:for eachを使用してUIImageView)四角形を設定する必要があります。

  • 最初の画像は 0,0
  • 2 番目の画像は 320,0 です
  • 3 番目は 640,0 (など)

つまり、各画像は前の画像から 320 ピクセル右にあります。

最後のステップは、スクロール ビューの合計サイズを表すを設定contentSizeすることUIScrollViewです。CGSize

画像が 3 つある場合は、次のように (320*3) * 480 に設定します。

myScrollView.contentSize = CGSizeMake(320*3, 480);

多くの人は、スクロール ビューを初期化するときに、表示する画像をステップ実行する for ループなどを使用します。これらの for ループは、次のようになります。

CGFloat scrollWidth = 0.f;
for (UIImage *someImage in someNSArrayWithImages) {
    UIImageView *theView = [[UIImageView alloc] initWithFrame:
        CGRectMake(scrollWidth, 0, 320.f, 480.f)];
    theView.image = someImage;
    [myScrollView addSubview:theView];
    [theView release];
    scrollWidth += 320.f;
}
myScrollView.contentSize = CGSizeMake(scrollWidth, 480.f);

このようにして、物事を並べて、同時にコンテンツのサイズを取得します。

スクロールビューが「インテリジェントに」各画像にスクロールし、人が左右にスライドすると停止するようにしたい場合は、myScrollView.pagingEnabled = YES.

それがあなたの前進に役立つことを願っています。

于 2010-07-15T10:31:25.247 に答える
1

Apple の PageControl サンプル コードをご覧ください。かなり短く、簡単に理解できるので、水平方向にスワイプすると複数のビュー コントローラーが読み込まれるプロジェクトのセットアップの要点を理解できます。

この設定が完了したら、独自のコンテンツ(この場合は画像)をロードするのはView Controllerの責任です。ページングなどに取り組む前に、最初に (スレッドなどを使用して) 画像を読み込む方法を理解していることを確認する必要があります。

2 つの独立したタスクと考えてください。ビュー コントロールは、画像の読み込みと表示を担当します。ページングを使用したスクロール ビューは、適切なビュー コントローラーにそれ自体をロードするタイミングを通知するだけです (ビュー コントローラーがロードされた後に何をするかは気にしません)。

幸運を!

于 2010-07-15T16:02:02.740 に答える
1

「無限」の画像があると仮定すると、起動時または起動前にそれらすべてを巨大な UIScrollView に配置することはできません。(UIViewのサイズには制限があります)

私が解決した方法: 画面全体をカバーする UIScrollView を作成します。そのコンテンツは、幅 3*320、高さ 480 の UIView で、左に 320 ピクセル、右に 320 ピクセル拡張する必要があります。

左、中央、右の 3 つの UIImageView を入れます。paging=YES を設定すると、作成した 3 つの「ページ」に uiscrollview がクリップされます。

クラスが uiscrollview のデリゲートであることを確認し、

-(void)scrollViewDidEndDragging:(UIScrollView*)sv willDecelerate:(BOOL)notFinished
-(void)scrollViewDidEndDecelerating:(UIScrollView*)sv
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView*)sv

ページング境界に達したときに適切な遷移を行います。画像をシフトして ContentOffset を設定すると、中央の画像が再び表示されます。

最初にこれを作成してから読み進めることをお勧めします...

次に、ここに文書化されているバグにヒットしますUIScrollView - (bounces = NO) はオーバーライドされているようです (pagingEnabled = YES)とここhttp://www.iphonedevsdk.com/forum/iphone-sdk-development/935-paging-uiscrollview .html、バウンスを無効にすると同時にページングを有効にすることはできません。したがって、バウンスを有効にし、UIScrollView をサブクラス化し、setContentOffset を上書きしてバウンスを防ぎます。(バウンスを実際に有効にすると、かなり変わったユーザー エクスペリエンスになります)

于 2010-07-15T10:24:16.070 に答える