2010-08-18 24 views
5

Cách phong nha để tải UIImages theo yêu cầu mà không chặn chủ đề chính là gì?UII tải xuống Lười biếng từ các tệp mà không chặn chủ đề chính?

Bối cảnh: Tôi có một vài nghìn hình ảnh trên tường mà tôi có thể cuộn qua. Rõ ràng nó không khả thi để tải tất cả các UIImages, vì vậy ngay bây giờ tôi chỉ lười tải những cái đang được hiển thị, và sau đó phát hành chúng khi chúng không còn cần thiết nữa. Vấn đề là tải UIImages từ các tập tin có một khoảng thời gian đáng chú ý, chỉ đủ dài để gây ra nói lắp trong khi di chuyển. Đây là do không có nghĩa là hình ảnh lớn (khoảng 250x250, có thể 20-30kb mỗi), nhưng họ vẫn gây ra nói lắp.

Trả lời

0

Tôi sử dụng lớp con UIImageView tùy chỉnh cho một mục tương tự như thế này. Nó chủ yếu được sử dụng để tải xuống hình ảnh (ví dụ như hình đại diện và hình ảnh trong luồng twitter), do đó, nó sử dụng NSURLConnection để tải xuống hình ảnh từ URL. Sau đó, URLConnection sẽ gọi phương thức ủy nhiệm khi hoàn tất, sau đó tôi sử dụng phương thức này để cập nhật UIImageView. Tôi thêm vào sau là một từ điển tĩnh với hình ảnh được lưu trong bộ nhớ cache, vì vậy hình ảnh được sử dụng thường xuyên hơn không cần phải tải xuống mỗi lần. Điều này là khá hữu ích cho các công cụ như các avatar twitter đã đề cập trước đó.

Tôi không chắc chắn nếu bạn đang cố gắng để tải hình ảnh từ web hoặc địa phương, vì vậy điều này có thể không áp dụng một cách hoàn hảo với tình hình của bạn, nhưng tôi hy vọng điều này sẽ giúp ...

0

Bạn có thể làm điều này rất một cách đơn giản. Đầu tiên tạo một hàng đợi khi tạo một đối tượng UIScrollView. Sau khi bạn tạo, bạn có thể tải hình ảnh từ bộ nhớ cục bộ của mình bằng hàng đợi vừa tạo.

//get a dispatch queue 
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 


//this will start the image loading in bg 
dispatch_async(concurrentQueue, ^{   
    NSData *image = [[NSData alloc] initWithContentsOfURL:imageURL]; 

    //this will set the image when loading is finished 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     imageView.image = [UIImage imageWithData:image]; 
    }); 
}); 
Các vấn đề liên quan