繁体   English   中英

UIScrollView委托方法冲突

[英]UIScrollView Delegate methods clashing

我正在使用以下两个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对象停止此双重方法调用吗?

// 很简单

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

    if(!decelerate){
         // Do something 
    }

}

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

滚动视图委托完成其工作。 您无法阻止它的发生。 但是,通过简单的逻辑,您可以实现您想要做的事情。

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

    dragged = YES;
    // do something
}

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

    if (!dragged) {

         // do something
    }

    dragged = NO;
}

这似乎有效。 接近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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM