ios - 下载的图片需要很长时间才能显示在 UIImageView 上

标签 ios swift uiimageview uiimage

我的 View 上有两个 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)

当我运行代码时,我立即看到“加载完成...”,这意味着图片已加载,但需要很长时间(大约1 min) 使 UIImageView 实际更改为加载的图片。这是一张非常小的图片 (~15K),不可能是处理时间问题。

我尝试加载资源图片(代码的注释部分)而不是下载的图片,但它仍然很慢。

我真的很困惑。为什么 swift 在处理 block 内的图像时如此缓慢?

最佳答案

也许当数据任务返回时它在后台线程上?您将需要切换到主线程来更改 UIImageView。不管怎样,我都会使用 UIImageView+AFNetworking 类别来实现这一点。它简单、经过良好测试,并允许您提供占位符图像以在下载时显示。

https://github.com/AFNetworking/AFNetworking/blob/master/UIKit%2BAFNetworking/UIImageView%2BAFNetworking.h

使用:

myImageView.setImageWithURL(url!)

关于ios - 下载的图片需要很长时间才能显示在 UIImageView 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32044498/

相关文章:

ios - 在 UIImageView 上绘制而不替换其原始图像 iOS

iOS 解决方案,仅当图像尚未使用 SDWebImage 缓存在内存中时才加载带有动画的图像

ios - UISplitViewController 首先显示详细 View

iOS:首次运行应用程序期间的 NSUserDefaults?

ios - 仅限 iOS9 上的 UICollectionView NSInternalInconsistencyException 错误

ios - Swift:来自调试器的消息:由于内存问题而终止

ios - 解码错误 : The data couldn't be read. Alamofire

swift - 如何使用 ARKit 从远程服务器加载模型和纹理?

ios - TabBar 在程序化 segue 时消失

swift - 如何使用 Swift 的逻辑动态显示图像和文本?