swift - 用于在 UICollectionView 中下载和显示图像的 UIImageView 扩展

标签 swift uiimageview uiimage uicollectionview nsurlsession

我制作并扩展了 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/

相关文章:

objective-c - 如何将图像缩放到一帧?

ios - 如何使用 Firebase IOS 聊天添加通知?

ios - 如何以编程方式快速打开带有坐标的 map 应用程序?

swift - ios-charts xaxis 标签未对齐

ios - 在 Objective-C 的 UIImage 的透明区域上屏蔽背景颜色

java - 在 iOS7 中编码 UIImage 并在 Java 中解码(Base64)

swift - 从另一个类更新 UILabel(与 View Controller 无关)

ios - 选择表格 View 单元格时显示自定义 UIImageView

ios - UIImageView(以编程方式创建)未显示

objective-c - 在控制台 : "CreateWrappedSurface() failed for a dataprovider-backed CGImageRef." 中获取消息