下载的图片需要很长时间才能显示在 UIImageView 上
Downloaded picture takes a very long time to be shown on UIImageView
我的视图上有两个 UIImageView 对象存储在一个名为 imgViews 的数组中,我尝试使用以下代码为它们异步下载图像:
func showPic(positionIndex: Int){
let urlStr = "https://www.friendesque.com/arranged/userpics/amir/1"
let url = NSURL(string: urlStr)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
if error == nil {
self.imgViews[positionIndex].image = UIImage(data: data)
//self.imgViews[positionIndex].image = UIImage(named: "11665489_10154101221228009_2542754962143804380_n.jpg")
print("Loading Done...")
}
else{
print(error)
}
})
task.resume()
}
在我的 viewDidLoad() 中,我有
showPic(0)
当我 运行 代码时,我立即看到 "Loading Done..."
这意味着图片已经加载但需要很长时间(大约 1 min) 使 UIImageView 实际更改为加载的图片。图片很小(~15K),应该不是处理时间的问题。
我尝试加载资源图片(代码的注释部分)而不是下载的图片,但速度仍然很慢。
我真的很困惑。为什么 swift 在块内处理图像时这么慢?
也许当数据任务returns在后台线程时?您将需要切换到主线程来更改 UIImageView。不管怎样,我都会使用 UIImageView+AFNetworking 类别来实现这一点。它简单,经过良好测试,并允许您提供占位符图像以在下载时显示。
使用:
myImageView.setImageWithURL(url!)
我的视图上有两个 UIImageView 对象存储在一个名为 imgViews 的数组中,我尝试使用以下代码为它们异步下载图像:
func showPic(positionIndex: Int){
let urlStr = "https://www.friendesque.com/arranged/userpics/amir/1"
let url = NSURL(string: urlStr)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url!, completionHandler: { (data, response, error) -> Void in
if error == nil {
self.imgViews[positionIndex].image = UIImage(data: data)
//self.imgViews[positionIndex].image = UIImage(named: "11665489_10154101221228009_2542754962143804380_n.jpg")
print("Loading Done...")
}
else{
print(error)
}
})
task.resume()
}
在我的 viewDidLoad() 中,我有
showPic(0)
当我 运行 代码时,我立即看到 "Loading Done..."
这意味着图片已经加载但需要很长时间(大约 1 min) 使 UIImageView 实际更改为加载的图片。图片很小(~15K),应该不是处理时间的问题。
我尝试加载资源图片(代码的注释部分)而不是下载的图片,但速度仍然很慢。
我真的很困惑。为什么 swift 在块内处理图像时这么慢?
也许当数据任务returns在后台线程时?您将需要切换到主线程来更改 UIImageView。不管怎样,我都会使用 UIImageView+AFNetworking 类别来实现这一点。它简单,经过良好测试,并允许您提供占位符图像以在下载时显示。
使用:
myImageView.setImageWithURL(url!)