2012-10-17 39 views
9

tôi lấy rất nhiều hình ảnh từ web, và họ là tất cả các loại kích cỡ - chúng có thể lớn, nhỏ vv ..quá trình SDWebImage hình ảnh trước khi bộ nhớ đệm

Vì vậy, tôi có thể thay đổi kích thước họ khi tôi hiển thị chúng trong tế bào nhưng điều này không hiệu quả. Đó là cách tốt hơn để thay đổi kích thước chúng sau khi SDWebImage có tải chúng và bộ nhớ cache chúng thay đổi kích cỡ, thay vì lưu trữ hình ảnh lớn trên đĩa và thay đổi kích cỡ chúng cho mỗi tế bào.

Vậy làm cách nào tôi có thể thực hiện việc này với SDWebImage hoặc tôi phải hack một chút vào lớp học?

Trả lời

4

Tôi đã gặp vấn đề tương tự như bạn và đã thử chỉnh sửa SDWebImage trước, nhưng đã kết thúc xây dựng thành phần của riêng tôi đã giải quyết được sự cố. Bạn có thể xem qua tại đây: https://github.com/adig/RemoteImageView

+0

này là rất tốt! Làm tốt công việc trên thư viện. Có một số phiền toái, giống như hình ảnh tải lại trên mỗi tin nhắn reloadData, hoặc hình ảnh xuất hiện lại trên mỗi cuộn bảng. Bạn có thể xem xét điều này. Cảm ơn và chúc mừng! – Devfly

+0

Cảm ơn bạn đã phản hồi. Nếu bạn đang đề cập đến chuỗi hoạt ảnh trên tải hình ảnh, bạn có thể tắt tính năng này bằng cách sử dụng thuộc tính animate. – adig

+0

Vâng, thật tuyệt vời tôi đã thực hiện nó. – Devfly

24

Nhà phát triển SDWebImage Olivier Poitrey đã trả lời câu hỏi này cho tôi here.

Bạn cần phải thực hiện các giao thức SDWebImageManagerDelegate và sau đó đặt nó như là đại biểu người quản lý chia sẻ như thế này:

SDWebImageManager.sharedManager.delegate = self; 

using the imageManager:transformDownloadedImage:withURL: instance method. 

More information.

Làm việc một cách hoàn hảo đối với tôi.

+1

Điều này thật tuyệt vời! Cảm ơn bạn rất nhiều vì đã hướng tôi đi đúng hướng. – kleo

+0

Xin lỗi đã không nhận được. Tôi đang sử dụng UIImageView + sd_setImageWithURL lớp của WebCache.h: (NSURL *) url placeholderImage: (UIImage *) phương thức giữ chỗ cho hình ảnh của mỗi ô. Tôi nên làm gì đây, bạn có thể nói trong điều khoản của giáo dân. –

0

SDWebImage 3.8.2

Nếu sử dụng danh mục UIImageView sd_setImageWithURL. Tôi đã tạo ra một loại UIImageView (phần mở rộng)

func modifiedImageFromUrl(url: NSURL?) { 
    self.sd_setImageWithURL(url) { (image, error, cacheType, url) in 
     if cacheType == SDImageCacheType.None && image != nil { 
      dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)) { 
       let modifiedImage = // modify image as you want 

       dispatch_async(dispatch_get_main_queue()) { 
        SDWebImageManager.sharedManager().saveImageToCache(modifiedImage, forURL: url) 

        self.image = modifiedImage 
       } 
      } 
     } 
    } 
} 
0

mở rộng về câu trả lời Maestro trong Swift 3:

myImageView.sd_setImage(with: imageUrl){ (image, error, cacheType, url) in 
    guard let image = image, cacheType == .none else { return } 

    DispatchQueue.global(qos: .userInitiated).async { 
     let modifiedImage = myImageProcessor(image) 
     SDWebImageManager.shared().saveImage(toCache: modifiedImage, for: imageUrl) 
     DispatchQueue.main.async { 
      myImageView.image = modifiedImage 
      myImageView.setNeedsDisplay() 
     } 
    } 
} 
Các vấn đề liên quan