2012-12-25 37 views
11

Tôi đang sử dụng SDWebImage (ver3.0) trên ứng dụng iOS của mình và tôi muốn mờ dần trong hình ảnh mới của uitableviewcell khi tải như Path2.0, Pinterest và Viddy.Thanks iOS SDWebImage fade in new image, tự tắt máy đang hoạt động. Tuy nhiên, hình ảnh trong ô được tải lại khi cuộn chế độ xem bảng. Điều này có thể do tái sử dụng ô.iOS SDWebImage mờ dần trong UITableViewCell

Đây là mã của tôi.

[cell.userImageView setImageWithURL:url 
        placeholderImage:placeholderImage 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
           if (!error) { 
            cell.userImageView.alpha = 0.0; 
            [UIView transitionWithView:cell.userImageView 
                duration:1.0 
                options:UIViewAnimationOptionTransitionCrossDissolve 
                animations:^{ 
                 [cell.userImageView setImage:image]; 
                 cell.userImageView.alpha = 1.0; 
                } completion:NULL]; 
           } 
          }]; 
+0

Tìm hiểu xem SDWebImage có lưu vào bộ nhớ đệm không - nếu có, hãy đảm bảo bạn chỉ tạo hoạt ảnh cho các tải không được lưu trong bộ nhớ cache. – Till

+0

Cảm ơn! Caching được thực hiện. Nhưng, tôi đã không kiểm tra tôi chỉ animate tải không được lưu trữ ... – tsk

Trả lời

25

tín dụng đi vào @OzBoz để chỉ ra rằng giải pháp đúng là chỉ cần xác nhận cho dù hình ảnh được lấy từ mạng (không lưu trữ) và nếu như vậy, thực hiện các hoạt hình:

[cell.userImageView setImageWithURL:url 
        placeholderImage:placeholderImage 
          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) { 
           if (image && cacheType == SDImageCacheTypeNone) 
           { 
            cell.userImageView.alpha = 0.0; 
            [UIView animateWithDuration:1.0 
                animations:^{ 
                 cell.userImageView.alpha = 1.0; 
                }]; 
           } 
          }]; 

Nếu bạn lo ngại về các tế bào không còn có thể nhìn thấy), bạn cũng có thể sử dụng:

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 

phương pháp này (không nên nhầm lẫn bởi những tên tương tự UITableViewDataSource phương pháp) sẽ trở lại không phải nil nếu hàng vẫn hiển thị. Điều này rất quan trọng để thực hiện trong hầu hết các quy trình truy xuất hình ảnh không đồng bộ UITableViewCell, nhưng hóa ra là setImageWithURL sẽ hủy mọi quá trình truy xuất hình ảnh trước đó, vì vậy ít quan trọng hơn khi kiểm tra điều này khi sử dụng SDImageWeb.

+0

Thanks !! Mã của bạn hoạt động tốt (tôi thay thế các loại UITableViewCell với lớp con tế bào tùy chỉnh của tôi) !! Tôi không biết tôi nên kiểm tra xem liệu một tế bào vẫn có thể nhìn thấy khi cập nhật không đồng bộ ô. Vì vậy, tôi đã học được rất nhiều. – tsk

+0

@Rob Tôi chỉ tò mò, tôi đã sử dụng nếu (cacheType == SDImageCacheTypeNone) thay vì UITableView * cell = [tableView cellForRowAtIndexPath: indexPath]; nếu (ô) một lần hiển thị hoạt ảnh sau khi tải dữ liệu từ http. Sau khi tôi sử dụng câu lệnh if của bạn, tôi không thể tìm ra lý do tại sao ô đến bằng 0 nếu hình ảnh trong ô được đổi thành tiền trước đó. – OzBoz

+0

@Rob Cảm ơn câu trả lời. Nhưng, vẫn còn một cái gì đó không rõ ràng. Logic đằng sau việc sử dụng 'cacheType == SDImageCacheTypeNone' để kiểm tra xem dữ liệu đến từ web có tạo hoạt ảnh hay không. Nếu không, thì không phải vì hình ảnh được lưu trong bộ nhớ cache sẽ hiển thị ngay lập tức mà không có hoạt ảnh (như ứng dụng instagram). Điều tôi không thể hiểu là tại sao ô trở thành không (được sử dụng lại bởi một hàng khác) nếu hình ảnh cài đặt cho số lần xem trước được tải trước. Nếu tôi thay đổi liên kết của hình ảnh trong hàng thứ hai, ô trở thành khác 0. Tại sao lại như vậy? – OzBoz

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