2011-08-02 88 views
0

我使用以下两种UIScrollView的委托方法调用在我的UIViewController另一种方法:UIScrollView的委托方法发生冲突

-(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对象来停止这种双重方法调用?

+0

你可以对你想要什么更加清楚一点? –

+0

如果你没有任何复杂的事情,你不能只是尝试'scrollViewDidScroll'方法吗? – visakh7

+0

scrollViewDidScroll太重了。我已经发布了下面的解决方案。我基本上需要一种方法来在滚动停止时自然减速或者当用户停止拖动操作时触发。 – mootymoots

回答

2

滚动视图委托做它的工作。你无法阻止它发生。但是用一个简单的逻辑你就可以实现你想要做的事情。

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

    dragged = YES; 
    // do something 
} 

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

    if (!dragged) { 

     // do something 
    } 

    dragged = NO; 
} 
+0

这很接近......它激发了我对下面的工作解决方案的... – mootymoots

+0

请注意:scrollViewDidEndDragging之后可能不会调用scrollViewDidEndDecelerating –

0

这似乎工作。关闭EmptyStack's answer

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

//很简单

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

    if(!decelerate){ 
     // Do something 
    } 

} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
     // Do something 
} 
相关问题