スクロールビュー(pagingEnabledがYESに設定されている)のページ幅をスクロールビューの境界以外に設定する最も簡単な方法は何ですか?
例を挙げましょう。それぞれが150ピクセル幅の10個のアイテムを含むスクロールビューがあり、スクロールビューの幅が300ピクセルであるとします。ビュー1と2を表示して開始し、水平方向に右にスクロールすると、次の「ページ」にアイテム2と3が表示されます。もう1ページ右にスクロールすると、アイテム3と4が表示されます。
誰かがこれをしましたか?そうでない場合、どのような戦略を使用しますか?
Alexander Reptyは、まさにこのトピックについてブログに書いています: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html 。簡単な答え:「ページ」の幅を変更するほど簡単ではありませんが、それほど難しくはありません。
マイク、
ベンがあなたをリンクした私のブログからのアプローチを使用してください。 UIScrollViewを周囲のビューの半分のサイズ(つまり150px)にして、中央に配置するのではなく、左に移動します。
それはあなたが望む振る舞いを正確に与えるはずです。
乾杯、アレックス
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];
}
}
ScrollViewWillEndDraggingをオーバーライドするだけです
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat pageWidth = 160;
targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
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で正常に動作します