2010-06-10 21 views
6

NSDocumentDirectory'dan birkaç görüntü yüklediğim uygulamamda bir UITableView var. , çalışır, ancak yukarı ve aşağı kaydırırken, uygulama büyük olasılıkla, ana iş parçacığında sunulmakta olan resimler nedeniyle, tabloyu etkili bir şekilde engellenene kadar kaydırır. Benim sorunum, onları daha sonra nasıl yükleyeceğimi bilmem, kaydırma yaparken "tembel bir yükleme" özelliği. NSDocumentDirectory UITableViewCells için tembel yükleme görüntüleri?

Bu

kod parçacığı Şimdi resimleri yüklemek için kullanılır:

imagesPath = [NSString stringWithFormat:@"%@/images/", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]]; 
if ([fileManager fileExistsAtPath:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]]) { 
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:[imagesPath stringByAppendingPathComponent:[NSString stringWithFormat:@"/%d.png", rowID]]]; 
    // If image contains anything, set cellImage to image. If image is empty, use default, noimage.png. 
    if (image != nil){ 
     // If image != nil, set cellImage to that image 
     cell.cellImage.image = image; 
    } 
    [image release]; 
} 

Her hücrede için "tembel yük" görüntüleri kaydırma içinde kalmış önlemenin en iyi yolu nedir?

cevap

7

SDWebImage deposuna bir göz atın. Eşzamansız görüntü yüklemesi yapmak için her şeyi sağlar.

Güncelleme

Ben sadece çok beklendiği gibi çalışmayabilir yerel bir dosya indirirken, README bazı yazım hataları olduğunu fark ettim.

Bazı örnek kodlar. Görünüm denetleyicisi bir UIImageView çıkışına sahip ve image.jpg dosyasını yüklemek istiyor.

- (IBAction)loadImage:(id)sender { 
    SDWebImageManager *manager = [SDWebImageManager sharedManager]; 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *destPath = [documentsDirectory stringByAppendingPathComponent:@"image.jpg"]; 
    NSURL *url = [NSURL fileURLWithPath:destPath]; 
    UIImage *cachedImage = [manager imageWithURL:url]; 
    if (cachedImage) 
    { 
     imageView.image = cachedImage; 
    } 
    else 
    { 
     // Start an async download 
     [manager downloadWithURL:url delegate:self]; 
    }  
} 

- (void)webImageManager:(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image 
{ 
    imageView.image = image; 
} 
+0

ben bir görüntü indirmek için çalışıyorum değilim, ben NSDocumentDirectory bir görüntüde yüklemeye çalışıyorum: O SDWebImageManagerDelegate protokolü uygular. – Emil

+0

İndirme, NSURL tarafından desteklenen herhangi bir kaynağa erişim olarak anlaşılmalıdır. NSURL, birkaç protokol için kullanılabilir: http, ftp veya dosya. Bir NSURL yolunu dönüştürün ve yerel dosyanızı "karşıdan yükleyin". –

+0

Çalışıyorum ama işe yaramıyor! NSURL bir dizeden yüklenir: 'file: // var/mobile/Applications/RANDOMIDENTIFIER/Documents/images/10.png'. – Emil

İlgili konular