UIScrollView Делегирование методов конфликтует - PullRequest
0 голосов
/ 02 августа 2011

Я использую следующие два метода делегата UIScrollView для вызова другого метода в моем UIViewController:

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

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

Я пробовал разные способы вызова // сделать что-то, но в итоге либо оба не вызывались, либо оба метода делегата вызывались, // вызывая что-то дважды в определенных ситуациях. Например:

-(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, чтобы остановить этот двойной вызов метода?

Ответы [ 3 ]

2 голосов
/ 18 февраля 2013

// очень просто

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

    if(!decelerate){
         // Do something 
    }

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
       // Do something 
}
2 голосов
/ 02 августа 2011

Представитель представления прокрутки выполняет свою работу. Вы не можете предотвратить это. Но с простой логикой вы можете достичь того, что вы пытаетесь сделать.

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

    dragged = YES;
    // do something
}

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

    if (!dragged) {

         // do something
    }

    dragged = NO;
}
0 голосов
/ 02 августа 2011

Это похоже на работу.Близко к пустому ответу

-(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;
    }
}
...