2014-05-23 114 views
0

我有這個代表其意在執行時,用戶滾動他的手指:scrollViewDidScroll:以編程方式滾動時?

-(void)scrollViewDidScroll:(UIScrollView *)scrollView 

我此行與代碼滾動到開始:

[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES]; 

當我執行這一行代碼以編程方式滾動,第一個委託也被調用。 我想消除這種情況發生。

我試圖設置委託到零,但它仍然執行委託:

scroller.delegate=nil;//to not excute scrolldidscroll 
[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES]; 
scroller.delegate=self; 

編輯:

我看了這個偉大的答案:Setting contentOffset programmatically triggers scrollViewDidScroll但似乎他的解決方案(在第一)是沒有動畫,而我需要那個動畫。

回答

7

有可能是一個更好的解決方案,但是這應該工作:

self.scrollingProgrammatically = YES; 
[scroller scrollRectToVisible:CGRectMake(0, 0,scroller.frame.size.width,scroller.frame.size.height) animated:YES]; 

...

在您的.h

@property(nonatomic,assign) BOOL scrollingProgrammatically; 

而且在您的m聲明一個布爾

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    if(!self.scrollingProgrammatically){ 
     ... 
    } 
} 

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ 
    self.scrollingProgrammatically = NO; 
} 
+0

謝謝,當然我可以那樣做,但我wa s試圖避免這個.. – Curnelious

+0

好吧,我會去爲它.. :) – Curnelious

+0

嗯,是啊有可能沒有更輕的方式來做到這一點。此外,我編輯了我的答案,因爲如果以編程方式調用scroll,則不會調用didEndDragging。 – streem