2011-01-19 22 views
8

Tải xuống hình ảnh từ mạng và hiển thị hình ảnh trong UIImageView khá dễ dàng. Tuy nhiên, điều này đòi hỏi hình ảnh phải được tải xuống hoàn toàn trước khi nó được hiển thị cho người dùng, hoàn toàn đánh bại hình ảnh JPEG (và PNG) tiến bộ.Làm cách nào để hiển thị JPEG tiến bộ trong UIImageView trong khi đang được tải xuống?

Làm cách nào để hiển thị hình ảnh đã tải xuống một phần trong khi quá trình chuyển đang được thực hiện? Tôi sẽ tưởng tượng SDK để có một số chức năng gọi lại mà sẽ cập nhật hình ảnh, nhưng tôi không thể tìm thấy một chức năng như vậy. Có thể nào ở tất cả với SDK iOS hiện tại không?

Trả lời

0

Bạn đã cố gắng hiển thị UIImage một phần vì didReceiveData được gọi là…? Một cái gì đó giống như ...

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    //TODO: add some error handling in case the image could not be created 
    UIImage *img=[UIImage imageWithData:data]; 
    if (img) { 
     self.imageView.image=img; 
    } 
} 
+0

Điều đó không làm việc tồi tệ như tôi mong đợi vì vậy tôi đoán sẽ làm cho thời điểm này. Tuy nhiên, đó là một chút xấu xí cách hình ảnh hiển thị các khu vực chưa được tải xuống của hình ảnh và có vẻ tồi tệ hơn nhiều về mặt hiệu suất hơn là giải nén dần hình ảnh như với libjpeg thô do tính toán lại hoàn toàn hình ảnh. –

+0

Một cách tiếp cận khác (tốt hơn, tôi đoán) sẽ sử dụng một thư viện như libjpeg (nếu có sẵn cho iOS). – versatilemind

10

Tôi biết bài này có khoảng 1 năm, nhưng chỉ trong trường hợp bất cứ ai đang tìm kiếm nó, có một dự án có tên NYXImagesKit mà những gì bạn đang tìm kiếm.

Lớp học có tên là NYXProgressiveImageView là lớp con của UIImageView.

Tất cả bạn phải làm là:

NYXProgressiveImageView * imgv = [[NYXProgressiveImageView alloc] init]; 
imgv.frame = CGRectMake(0, 0, 320, 480); 
[imgv loadImageAtURL:[NSURL URLWithString:@"http://yourimage"]]; 
[self.view addSubview:imgv]; 
[imgv release]; 

Ngoài ra, một lựa chọn tốt là để lưu hình ảnh của bạn như interlaced để nó tải với chất lượng thấp và cải thiện việc tải xuống. Nếu hình ảnh không bị xen kẽ, nó sẽ được tải từ trên xuống dưới.

+1

Cảm ơn, không biết rằng 'ImageIO.framework' có khả năng làm điều đó, và thậm chí cho các loại tệp khác nhau. –

+0

'NYXProgressiveImageView' không tải phần chất lượng thấp của tệp jpeg tiến bộ. Nó chỉ hiển thị hình ảnh hoàn toàn sau khi tải xuống tất cả. – nickcheng

+0

Đó là đường cơ sở, không tiến bộ như ứng dụng Facebook – keywind

1

Hiện nay, một thư viện mã nguồn mở nhỏ trên đầu trang của libjpeg-turbo cho phép giải mã và hiển thị hình ảnh JPEG tiến bộ một cách dễ dàng:

let imageView = CCBufferedImageView(frame: ...) 
if let url = NSURL(string: "http://example.com/yolo.jpg") { 
    imageView.load(url) 
} 

thấy https://github.com/contentful-labs/Concorde

Các vấn đề liên quan