2010-05-03 181 views
0

我有一個應用程序需要滾動許多圖像。在UIScrollView中延遲加載圖像

因爲我無法加載所有的圖像,並將其保存在內存中,我懶加載它們。

問題是如果我滾動得太快,顯示「黑色圖像」(圖像,無法加載)。

這是延遲加載代碼: int currentImageToLoad = [self calculateWhichImageShowing] + imageBufferZone; [(UIView*)[[theScrollView subviews] objectAtIndex:0]removeFromSuperview]; PictureObject *pic = (PictureObject *)[imageList objectAtIndex:currentImageToLoad];

MyImageView *iv = [[MyImageView alloc] initWithFrame:CGRectMake(currentImageToLoad * 320.0f, 20.0f, 320.0f, 460)]; 
    NSData *imageData = [NSData dataWithContentsOfFile:[pic imageName]]; 
    [iv setupView:[UIImage imageWithData: imageData] :[pic imageDescription]]; 
    [theScrollView insertSubview:iv atIndex:5]; 
    [iv release]; 

這裏面scrollViewWillBeginDecelerating代碼:

[NSThread detachNewThreadSelector:@selector(lazyLoadImages) toTarget:self withObject:nil]; 

回答

2
  1. 爲什麼在willbegindecelerating方法的代碼?將它放在scrolviewdidscroll方法中會更好,因此可以儘快加載。

  2. 你不應該從一個單獨的線程修改任何意見看法圖紙不是線程安全

  3. 是真正的圖像存儲爲文件數據,或者是他們的圖像文件?如果圖像文件,請使用[UIImage imageNamed:]加載它們,因爲此刻您正在執行2次轉換。如果它們是數據,我建議您在第一次顯示scollview時在單獨的線程上爲它們中的大多數創建UIImages,以便它們的圖像在需要添加到滾動視圖時準備好。