1

次の 2 つの UIScrollView デリゲート メソッドを使用して、UIViewController で別のメソッドを呼び出しています。

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    // do something
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    // do something
}

//do something を呼び出すさまざまな方法を試してみましたが、両方とも呼び出されないか、両方のデリゲート メソッドが呼び出されて、特定の状況で //do something を 2 回呼び出すことになります。例えば:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    if(![scrollView isDecelerating] && ![scrollView isDragging]){
        //do something
    }
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    if(!decelerate){
        //do something
    }
}

したがって、上記でスクロールしてゆっくりと停止すると、scrollViewDidEndDecelerating: が呼び出されますが、スクロールしてタップで停止すると、scrollViewDidEndDragging: と scrollViewDidEndDecelerating: の両方が呼び出されます。

どちらかを呼び出したい... scrollViewDidEndDecelerating: と scrollView オブジェクトでこのダブルメソッド呼び出しを停止することができますか?

4

3 に答える 3

2

//非常にシンプル

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

    if(!decelerate){
         // Do something 
    }

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
       // Do something 
}
于 2013-02-18T18:54:52.413 に答える
2

スクロール ビュー デリゲートがその役割を果たします。あなたはそれが起こるのを防ぐことはできません. しかし、単純なロジックを使用すると、やろうとしていることを達成できます。

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

    dragged = YES;
    // do something
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (!dragged) {

         // do something
    }

    dragged = NO;
}
于 2011-08-02T08:59:25.213 に答える
0

これはうまくいくようです。EmptyStack の回答に近い

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

    if (!dragged) {
        //do something
    }

    dragged = NO;
}

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

    if(!decelerate){
        dragged = YES;
        //do something
    } else {
        dragged = NO;
    }
}
于 2011-08-02T09:11:21.147 に答える