2011-07-30 91 views
1

我有一個帶有自定義UITableViewCells的UITableView。每個單元格異步加載圖像並顯示它,這一切都正常工作,表格視圖完美滾動。單元格中的UITableView動畫導致平滑滾動打破

我已經添加了一個「淡入」動畫到單元格圖像,但這打破了滾動表 滾動。當我輕彈時,只要圖像想要「淡入」,tableview的滾動動畫就會停止。幾乎就像新引入的單元格圖像中的「淡入」會中斷滾動動畫。

有什麼辦法可以繞過這個嗎?這是常見的行爲,還是我設法做了一些非常奇怪的事情?

這裏是回調函數,一旦圖像完成異步加載(動畫函數)就會被調用。

-(void)imageReady:(UIImage *)image FromUrl:(NSString *)url 
{ 
    [UIView animateWithDuration:0.3 animations:^ 
    { 
     [self.imageThumbnail setImage:image]; 
     self.imageThumbnail.alpha = 1; 
    }]; 

} 

我在早期階段將alpha設置爲0。

所有幫助表示讚賞。

回答

5

就我而言,它只需要animateWithDuration調用中的「UIViewAnimationOptionAllowUserInteraction」選項。

[UIView animateWithDuration:0.3 delay:0.0 options:(UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction) animations:^ 
     { 
      self.imageThumbnail.alpha = 1; 
     } completion:nil]; 
+0

哇,它會讓我永遠把我弄明白。看起來這個選項在iOS 4中默認是禁用的,但在iOS 5中默認啓用。 –

1

由於UITableViewUIScrollView下降,我會實施UIScrollViewDelegate方法,-scrollViewDidScroll:-scrollViewDidEndDecelerating:。另外,我會爲你的班級添加一個BOOL,比如shouldPerformAnimations

現在在-scrollViewDidScroll中,將shouldPerformAnimations設置爲NO。或者將其設置爲YES-scrollViewDidEndDecelerating:

現在,所有你需要做的就是檢查shouldPerformAnimationsimageReady:fromURL:執行動畫前。這個想法是,如果單元格正在滾動,執行用戶永遠不會看到的動畫是毫無意義的。因此,通過這樣做,我們只需等待表視圖停止滾動,然後我們對所有可見單元格執行動畫。您可以通過UITableView上的-indexPathForVisibleRows方法獲得可見單元格的索引路徑數組。