2010-06-10 7 views
6

Tôi có một UITableView trong ứng dụng của mình, trong đó tôi tải một vài hình ảnh từ NSDocumentDirectory. Nó hoạt động, nhưng khi di chuyển lên và xuống, ứng dụng dường như đóng băng một chút, rất có thể do các hình ảnh đang được phân phát trong chuỗi chính, ngăn chặn hiệu quả tableView từ cuộn cho đến khi được tải. Vấn đề của tôi là tôi không biết làm thế nào để tải chúng trong sau này, một "tải lười biếng" tính năng, trong khi di chuyển.Hình ảnh tải nhỏ cho UITableViewCells từ NSDocumentDirectory?

Đây là đoạn mã sử dụng để tải các hình ảnh bây giờ:

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]; 
} 

cách tốt nhất để "nạp lười biếng" những hình ảnh trong mỗi tế bào để tránh tụt hậu trong di chuyển là gì?

Trả lời

7

Hãy xem kho SDWebImage. Nó cung cấp mọi thứ để thực hiện tải hình ảnh không đồng bộ.

Cập nhật

Tôi chỉ nhận thấy rằng có một số lỗi chính tả trong các README, vì vậy tải một tập tin địa phương có thể không hoạt động như mong đợi.

Dưới đây là một số mã mẫu. Bộ điều khiển chế độ xem có ổ cắm UIImageView và muốn tải tệp image.jpg. Nó triển khai giao thức SDWebImageManagerDelegate:

- (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

Tôi không cố gắng tải xuống hình ảnh, tôi đang cố gắng tải hình ảnh từ NSDocumentDirectory. – Emil

+0

Việc tải xuống phải được hiểu là truy cập bất kỳ tài nguyên nào được NSURL hỗ trợ. NSURL có thể được sử dụng cho một số giao thức: http, ftp hoặc tệp. Chuyển đổi đường dẫn của bạn thành NSURL và "tải xuống" tệp cục bộ của bạn. –

+0

Tôi đang cố gắng, nhưng nó không hoạt động! NSURL được tải từ một chuỗi: 'file: // var/mobile/Applications/RANDOMIDENTIFIER/Documents/images/10.png'. – Emil