1

我正在使用以下两个 UIScrollView 委托方法来调用我的 UIViewController 中的另一个方法:

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

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

我尝试了各种不同的调用//做某事的方法,但要么最终都没有被调用,要么两个委托方法都被调用,在某些情况下调用 //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 对象来停止这个双重方法调用吗?

4

3 回答 3

2

The scroll view delegate does its job. You can not prevent it from happening. But with a simple logic you can achieve what you are trying to do.

- (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 回答
2

// 很简单

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

    if(!decelerate){
         // Do something 
    }

}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
       // Do something 
}
于 2013-02-18T18:54:52.413 回答
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 回答