如何通过swift创建图像下载progressView

时间:2017-05-01 14:19:30

标签: ios swift download uiprogressview

我有一个问题,我想在将图像下载到本地文件时显示progressView 我写了一个下载Image的功能,并以其他问题作为参考 但我不知道如何在我的函数中使用URLSessionDownloadTak或其他下载进度函数。

这是我的下载功能代码:

func ImageFromUrl(imageView:UIImageView,url:String,chatroomId:String) {

let documentsDirectoryURL = try! FileManager().url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true).appendingPathComponent("\(Image)/")
// create a name for your image
let fileName = url + ".jpg"
let fileURL = documentsDirectoryURL.appendingPathComponent(fileName)

let urlString = URL(string: url)

if let image = UIImage(contentsOfFile: fileURL.path)
{
    imageView.image = image
    return
}

DispatchQueue.global().async {
    let data = try? Data(contentsOf: urlString!) //make sure your image in this url does exist, otherwise unwrap in a if let check / try-catch

    if data != nil
    {
        if let image = UIImage(data: data!)
        {
            if !FileManager.default.fileExists(atPath: fileURL.path) {
                if let jpegData = UIImageJPEGRepresentation(image, 0.001)
                {
                    do {
                        try jpegData.write(to: fileURL, options: .atomic)
                    } catch {
                        debug(object: error)
                    }
                }
            } else {
                debug(object:"file already exists")
            }

            DispatchQueue.main.async {
                imageView.image = image//UIImage(data: data!)
            }
        }
    }
}
}

1 个答案:

答案 0 :(得分:1)

如果你想要一个简单的解决方案而不是NSURLSession,我会建议Alamofire。它有一种简单的方法来完成这种任务。

了解更多信息https://github.com/Alamofire/Alamofire

Alamofire.download(urlString)
    .downloadProgress { progress in
         print("Download Progress: \(progress.fractionCompleted)")
     }

     .responseData { response in
        if let data = response.result.value {
             let image = UIImage(data: data)
        }
     }