我制作并扩展了 UIImageView,它允许我异步下载图像,然后根据它们的特定索引(CollectionView 中的 IndexPath)将它们分配给它们的 ImageView。效果很好,唯一的问题是:
- 我在快速滚动和停止时仍然看到显示的错误图像。
谁能帮帮我?这是我的代码:
//UIImageView 扩展:
extension ExtendedUIImageView {
func downloadFrom(link link:String, contentMode mode: UIViewContentMode, imageIndex: Int) {
if (NSFileManager.defaultManager().fileExistsAtPath(link)) {
self.image = UIImage(contentsOfFile: link)
return
}
self.imageURL = NSURL(string: link)
let url = NSURL(string: link)
contentMode = mode
NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
guard
let httpURLResponse = response as? NSHTTPURLResponse where httpURLResponse.statusCode == 200,
let mimeType = response?.MIMEType where mimeType.hasPrefix("image"),
let data = data where error == nil,
let image = UIImage(data: data)
else { return }
dispatch_async(dispatch_get_main_queue()) { () -> Void in
if (url == self.imageURL) {
self.image = image
}
}
}).resume()
}
}
//我将像这样调用此方法:
self.previewImageView?.downloadFrom(link: localPath, contentMode: .ScaleAspectFill, imageIndex: cell.indexPath.item)
//哪里:
var previewImageView: ExtendedUIImageView?
请帮帮我:-O
最佳答案
你好~我前段时间一直在尝试做同样的事情。这就是我所做的。这对我来说很简单,而且工作正常,没有任何问题。
import Foundation
import UIKit
extension UIImageView {
//load image async from inaternet
func loadFromURL(photoUrl:String){
//NSURL
let url = NSURL(string: photoUrl)
//Request
let request = NSURLRequest(URL:url!);
//Session
let session = NSURLSession.sharedSession()
//Data task
let datatask = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in
if error != nil {
print(error?.localizedDescription)
}
dispatch_async(dispatch_get_main_queue()) {
self.image = UIImage(data: data!)
}
}
datatask.resume()
}
}
关于swift - 用于在 UICollectionView 中下载和显示图像的 UIImageView 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641858/