5

コンテンツサイズが1200x480のUIScrollViewがあります。幅が600になる画像ビューがいくつかあります。右にスクロールするときは、コンテンツサイズを大きくし、すべてがスムーズになるようにオフセットを設定します(他の画像を追加したいのですが、それは重要ではありません)たった今)。したがって、基本的に、現在ビューポートにある画像は左側のどこかに残り、最終的にはスーパービューから削除されます。

さて、左にスクロールすると問題が発生します。私がやっていることは、画像をコンテンツサイズの最後に移動し(したがって、各画像ビューのorigin.xに600を追加します)、それに応じてコンテンツオフセットを設定します。これは、指が画面上にあり、ユーザーがドラッグしたときに機能します(scrollView.isTracking = YES)。ユーザーが左にスクロールして離すと(scrollView.isTracking = NO)、画像ビューは右に向かって速く移動しすぎて、ほぼ瞬時に消えます。ユーザーが手動でビューをドラッグしておらず、すでに手放した場合でも、画像をうまく動かして消えないようにする方法を知っている人はいますか?

水平方向にドラッグするためのコードは次のとおりです。

-(void) scrollViewDidScroll:(UIScrollView *)scrollView {
    CGPoint offset = self.scrollView.contentOffset;
    CGSize size = self.scrollView.contentSize;

    CGPoint newXY = CGPointMake(size.width-600, size.height-480);

    // this bit here allows scrolling towards the right
    if (offset.x > size.width - 320) {
        [self.scrollView setContentSize:CGSizeMake(size.width+320, size.height)];
        [self.scrollView setContentOffset: offset];
    }

    // and this is where my problem is:
    if (offset.x < 0) {
        for (UIImageView *imageView in self.scrollView.subviews) {
            CGRect frame = imageView.frame;
            [imageView setFrame:CGRectMake
                (frame.origin.x+newXY.x, frame.origin.y, 200, frame.size.height)];
        }
        [self.scrollView setContentOffset:CGPointMake(newXY.x+offset.x, offset.y)];
    } 
}

編集:これは現在機能しています-私はStreetScrollerを見て、それはすべて今は良いです。

ただし、scrollviewを拡大したいのですが、viewForZoomingInScrollViewが呼び出されることはありません。コンテンツサイズが大きいスクロールビューを拡大することはできませんか?

4

1 に答える 1

5

この辺りにはいくつかのアプローチがあります。サイト検索を使用するだけです…</p>

Appleが作成したより「公式な」例が必要な場合は、StreetScrollerデモをご覧ください。この例の詳細については、昨年のWWDCセッション番号をご覧ください。104高度なスクロールビューテクニック

GithubにはBAGPagingScrollViewと呼ばれるUIScrollViewサブクラスもあります。これはページングと無限ですが、活発に開発されていないため(特にgoToPage:メソッドが問題を引き起こすため)、自分で修正する必要のあるバグがいくつかあります。

于 2012-02-25T14:31:13.280 に答える