0

UIScrollView天気アプリに似た、水平方向のページネーションがあります。特定の状況下で、ユーザーが水平方向にスクロールできないようにしたい。単純にスクロールを無効にするのは少し耳障りです - 私は最後のページを過ぎてスクロールする経験を再現したいと思います - 少しのスクロールは許可されていますが、それ以上コンテンツがないので、スクロールビューは跳ね返ります.

これを実装するにはどうすればよいですか?ScrollView の contentSize を変更する必要がありますか? 事実上 1 つの「ページ」が存在するようにページネーションを設定するにはどうすればよいですか?

4

2 に答える 2

1

1 ページだけであっても常にバウンスさせるにはUIScrollView、次の行を追加します。

[self.scrollView setAlwaysBounceHorizontal:YES];

contentSizeもちろん、の縮小に関する私のコメントに加えて。


編集:

OK、最初に達成したいことを説明しましょう。ユーザーが のページ間を楽しそうにスクロールしているUIScrollViewと、突然、 をUIScrollView現在のページ (最初のページである場合もそうでない場合もあります) に固定する必要があります。

私たちUIScrollViewのページはレイアウトされており、各ページは単一UIViewまたはそのサブクラスで表されます(サブビュー自体を持つ場合があります):

すべてのひょう MBP_RD

ここで、説明したタスクを実行するためのコードを次に示します。

CGFloat pageWidth = _scrollView.bounds.size.width;
int currentPage = (_scrollView.contentOffset.x / pageWidth);

[_scrollView setContentSize:CGSizeMake(pageWidth, _scrollView.contentSize.height)];
// move each page to the left:
for (UIView* page in _scrollView.subviews) {
    [page setFrame:CGRectOffset(page.frame, -currentPage * pageWidth, 0)];
}

注:複雑なビュー階層がある場合は、すべてのページとUIView同じ境界サイズを持つでラップするだけです。残りは読者の演習として残します(私はいつもxDと言いたかったです)_scrollView.contentSize

于 2012-09-11T18:32:38.823 に答える
0

上記のMazyodの答えはおそらく最良のものですが、ビューを元の場所に戻し、contentSizeユーザーから見えないようにサイズを変更するのに苦労しました。代わりに次のアプローチを使用しました。

サイズが制限された新しいスクロールビューを作成し、既存のスクロールビューの上に配置するだけです。3 つのビュー (使用されているビューとその両側) をこの一時的なスクロールビューに移動し、Mazyod の回答に従って原点を調整します。

元に戻す必要がある場合は、ビューを実際のスクロール ビューに戻し、一時的なビューを削除するだけです。

それほど効率的ではありませんが、実行可能な代替手段です。

于 2012-09-13T20:21:23.773 に答える