9

iOS アプリケーションで UIScrollView をナビゲーション デバイスとして使用しようとしています。基本的に、ページングが有効な UIScrollView の位置に基づいて、アプリケーションが特定のコンテンツを読み込むようにしたいと考えています。ナビゲーションホイールのようなものです。

現在、2 ページ (2*320) のスクロールビューがあり、scrollViewDidEndDraggingデリゲート メソッドを使用しcontentoffset.xて適切なコンテンツを読み込んでいます。私はそのようにスクロールビューの位置を決定しようとします:

if (scrollView.contentOffset.x < 320) {
   // Load content 1
    }
else if (scrollView.contentOffset.x >= 320) {
   // Load content 2
    }

私の問題は、contentoffset の操作方法を理解していないか、問題に対処するのに適していないことです。いずれにせよ、私は立ち往生しています。誰かが私が間違っていた場所を教えてくれたり、スクロールビューの位置を決定するためのより効率的な方法を教えてくれたりできますか?

私は愚かです、私は問題が何であるかを言及するのを忘れていました... 基本的に、スクロールビューの位置を追跡することはできません. 2 番目のページに移動すると、620 の制限を超えた場合 (右にバウンス) にのみ変更が登録されます。しかし、開始位置 (ページ 1) に戻ると、変更が登録されます。つまり、私の追跡は正確ではありません。

デリゲートと他のすべてが正常に機能しています。ログに記録します!

4

5 に答える 5

18

問題が何であるかを具体的に述べたことがないので、言うのは難しいですが、私はそれについていくつか推測します.

デリゲート メソッドがまったく呼び出されていない場合は、スクロール ビューのデリゲートを設定する必要があります。

[myScrollView setDelegate:self];

それ以外の場合、スクロール ビューのオフセットを検出するために使用する際の問題はscrollViewDidEndDragging、目的のページの範囲内または開始ページの範囲内にある可能性のあるドラッグを停止するポイントでオフセットをチェックすることです。scrollViewDidEndDecelerating別の方法として、スクロール ビューが目的のページで停止するとすぐに呼び出されるコンテンツ オフセットを確認することをお勧めします。

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if (scrollView.contentOffset.x < 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
    else if (scrollView.contentOffset.x >= 320) {
        NSLog(@"%@",NSStringFromCGPoint(scrollView.contentOffset));
    }
}
于 2012-12-23T17:08:58.840 に答える
8

私はこれがあなたを助けることができると思います:)。あなたscrollViewDidScrollは常にあなたのscrollViewの正確な位置を取得します:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.x < 320)
    {
         // Load content 1
    }
    else if (scrollView.contentOffset.x >= 320)
    {
         // Load content 2
    }
}

NSLog(@"Position: %g", scrollView.contentOffset.x);

UIScrollViewDelegate.h ファイルのデリゲートを忘れないでください。

于 2012-12-23T17:10:13.183 に答える
4

現在の位置 (ページ) を整数値として取得するためのソリューションを次に示します。 scrollViewDidEndDecelerating: メソッドを使用します。

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    NSLog(@"%i", (int)(_scrollView.contentOffset.x / _scrollView.frame.size.width));
}
于 2014-09-22T22:17:21.177 に答える
1

何らかの理由で、ビューの減速が終了する前に通知を受け取りたい場合。たとえば、アニメーションを実行します。これを使用することもできます:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    // Where the scroll will end (vertically)
    let offSetY = targetContentOffset.pointee.y

    // I've got a scroll view with paging enabled so I use this to check which "page" is selected.
    if offSetY == firstPageView.frame.origin.y {
        // Do something…
    } else if offSetY == secondPageView.frame.origin.y {
        // Do something…
    }
}
于 2020-04-25T08:04:55.793 に答える
0

UIScrollViewDelegate を使用して、

 func scrollViewWillBeginDragging(scrollView: UIScrollView){
        print("dragging begins")
        print("Position:  \(scrollView.contentOffset.x) , \(scrollView.contentOffset.y) ")
    }
于 2016-05-30T07:48:20.120 に答える