web-dev-qa-db-ja.com

UIScrollView-ページングが有効になっている場合、ページ幅を「変更」できますか?

スクロールビュー(pagingEnabledがYESに設定されている)のページ幅をスクロールビューの境界以外に設定する最も簡単な方法は何ですか?

例を挙げましょう。それぞれが150ピクセル幅の10個のアイテムを含むスクロールビューがあり、スクロールビューの幅が300ピクセルであるとします。ビュー1と2を表示して開始し、水平方向に右にスクロールすると、次の「ページ」にアイテム2と3が表示されます。もう1ページ右にスクロールすると、アイテム3と4が表示されます。

誰かがこれをしましたか?そうでない場合、どのような戦略を使用しますか?

31
Mike McMaster

Alexander Reptyは、まさにこのトピックについてブログに書いています: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html 。簡単な答え:「ページ」の幅を変更するほど簡単ではありませんが、それほど難しくはありません。

44
Ben Gottlieb

マイク、

ベンがあなたをリンクした私のブログからのアプローチを使用してください。 UIScrollViewを周囲のビューの半分のサイズ(つまり150px)にして、中央に配置するのではなく、左に移動します。

それはあなたが望む振る舞いを正確に与えるはずです。

乾杯、アレックス

5
Alex Repty

scrollviewデリゲートメソッドcontent-offsetの助けを借りて確実に行うことができます。

以下は同じものの詳細なコードです。

int start;

int end;

int k=0;

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{

    pageControlUsed = NO;

    start = scrollView.contentOffset.x;

}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{

    end = scrollView.contentOffset.x;

}   


- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{

    int diff = end-start;

        if (diff>0)
        {

         k=k+150;
         [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

        }
       else {

         k=k-150;
        [scrollView setContentOffset:CGPointMake(k, 0) animated:YES];

          }
}
4
Himanshu

ScrollViewWillEndDraggingをオーバーライドするだけです

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat pageWidth = 160;
    targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
2
Nico
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];


[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];

[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];

これはiOS7.1〜8.2で正常に動作します

1
Pluuuuto