2012-06-05 9 views
7

UIScrollViewの左右のスクロールに制限を設定する最適な方法は何ですか?私はこれが簡単だと思ったが、私の試みはすべて失敗した。iOS。 UIScrollviewのスクロールを制限するにはどうすればよいですか?

私は、アプリケーションの使用中にいつでもスクロール範囲をプログラムで制限することができる解決策が必要です。これは、多くの場合、表示されるデータの変化に対応することになります。

おかげで、
ダグ

答えて

-4

擬似コード:私の場合は

Calculate criteria for constraining pan 
if (pan-constraint-is-met) { 

    Calculate pan-limit 
    [self setContentOffset:limitedContentOffset]; 

} 
7

あなたがする必要があるだろうすべては、次のコードでスクロールビューのコンテンツのサイズを変更しています。

[scrollView setContentSize:CGSizeMake(width, height)];

+0

私はとにかくの内容を変更することはできません。私は視覚化アプリをやっていて、コンテンツのサイズは視覚化の基盤です。私が探しているのは、最小ZoomScaleと最大ZoomScaleの類似点です。これらの値を変更しても、コンテンツには影響しません。 – dugla

11

あなたは、スクロールビューのcontentSizeプロパティを使用してコンテンツのサイズを制御することができます。これでは不十分な場合(スクロール領域をコンテンツの途中の任意の領域に限定するなど)、スクロールビューのデリゲートメソッドでcontentOffsetを強制的に必要な制限にすることができます。

基本的には、コードは次のようになります。私は私のオーバーロードさlayoutSubviews方法でパン制約を置くことの私のアプローチと一緒に行きました

- (void) scrollViewDidScroll:(UIScrollView*)scroll{ 
    CGPoint offset = scroll.contentOffset; 

    // Check if current offset is within limit and adjust if it is not 
    if (offset.x < minOffsetX) offset.x = minOffsetX; 
    if (offset.y < minOffsetY) offset.y = minOffsetY; 
    if (offset.x > maxOffsetX) offset.x = maxOffsetX; 
    if (offset.y > maxOffsetY) offset.y = maxOffsetY; 

    // Set offset to adjusted value 
    scroll.contentOffset = offset; 
} 
+0

Vladimir、私は実際にあなたのソリューションに似ているアプローチを見つけました。私はscrollViewサブクラスのlayoutSubViewsをオーバーライドして、scrollViewDelegateで行っているのと同様の方法でクランプを行います。私はどちらのアプローチが望ましいかは実際は分かりません。デリゲートメソッドが呼び出されると、layoutSubviewsの後に発生します。何かご意見は? – dugla

+0

これは、ページングが有効になっているときにページングが正しく機能しないときに問題を引き起こします。 – moligaloo

関連する問題