2011-03-17 53 views
2

我有一個UIScrollView包含大圖像,並使用分頁在圖像之間滾動。爲了節省內存,我只在當前可見的圖像前後加載一個圖像,並在滾動完成後加載/釋放新圖像。快速滾動並且不調用scrollViewDidEndDecelerating時會出現問題。 當scrollViewDidEndDecelerating被調用時,我想在活動頁面中顯示圖像名稱。scrollViewDidEndDecelerating沒有被調用

我該如何解決這個問題?爲什麼發生這種情況?

+0

如果你不改變偏移量,你如何實現滾動? 我已經在不同的應用程序中進行了多次這樣的操作,並且您所描述的所有內容都可以使用「正常」方法(scrollRectToVisible)來實現,並根據您想實現的效果智能啓用/禁用動畫部分。聽起來你在這裏做的事很不尋常? – Adam 2011-03-20 14:24:15

+0

你有這個答案,我有同樣的問題... – 2015-07-27 05:18:31

回答

-1

scrollViewDidEndDecelerating:並不意味着要進行頁面佈局。您應該執行scrollViewDidScroll:並根據滾動視圖的contentOffset計算當前可見的頁面。如果可見範圍發生變化,請爲以前不可見的頁面添加視圖,並刪除不再可見的頁面。

+0

這並沒有幫助我找到解決我的問題。 – spd 2011-07-19 03:50:37

0

我用滾動視圖做相同的事情 - 延遲加載圖像。實際上,我們必須加載延伸的縮略圖(製作模糊的低分辨率圖像版本),然後在頁面實際顯示100%時加載實際圖像。

我只需要在scrollViewDidScroll中使用下面的代碼:scrollView。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{  
    if (!_isCurrentlyRotating) { 
     CGFloat pageWidth = _scrollView.frame.size.width; 
     int page = floor((_scrollView.contentOffset.x - pageWidth/2)/pageWidth)+1; 

     if (_currentPage != page) 
      [self setCurrentPage:page]; 
    } 
} 

以上計算將顯示的頁面(作爲滾動)。當頁面瀏覽量顯示爲50%時,它實際上會更改當前頁碼。這可以與頁面控件一起使用以突出顯示當前頁面點。

當用戶使用他們的手指改變頁面(正常行爲)時,使用上述(在滾動視圖中啓用分頁)scrollViewDidEndDecelerating:當頁面被100%顯示時調用scrollView。 100%我的意思是你只能看到一頁不是另一部分的一部分。

但是我們在調用scrollToPage:函數的滾動視圖的末尾有一個'Start Over'按鈕。

- (void) scrollToPage:(int)page { 
    CGRect frame; 
    frame.origin.x = self.scrollView.frame.size.width * page; 
    frame.origin.y = 0; 
    frame.size = self.scrollView.frame.size; 
    [self.scrollView scrollRectToVisible:frame animated:YES]; 
} 

使用scrollRectToVisible:動畫:方法不觸發scrollViewDidEndDecelerating:方法所以簡單地添加銳化方法(其簡單地在圖像視圖加載TE高分辨率圖像)調用這兩種方法,這樣它會被稱爲如果用戶滾動或者按下了重新開始按鈕。

- (void) scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { 
    [self sharpenImageView]; 
} 

- (void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    [self sharpenImageView]; 
} 

我希望這有助於!

0

有時候,只是清理項目,然後重新運行

移& Cmd的&ķ 移& Cmd的& Alt鍵&ķ

0

每個滾動完成後scrollViewDidEndDragging會調用

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

scrollViewDidEndDecelerating不每條拖調用(如果你不ACCE速度draged停止後拖動它會不會永遠不會調用此FUNC)如果你想移動滾動視圖使用API​​

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

scrollViewDidEndScrollingAnimation不用拖動,這個API會被調用。

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{}