【问题标题】:Downloaded picture takes a very long time to be shown on UIImageView下载的图片需要很长时间才能在 UIImageView 上显示
【发布时间】:2015-08-17 15:29:22
【问题描述】:

我的视图中有两个 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..." 这意味着图片已加载,但 UIImageView 需要很长时间(大约 1 分钟)才能真正更改为已加载图片。这是一张非常小的图片(~15K),不会是处理时间问题。

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

我真的很困惑。为什么 swift 在处理块内的图像时这么慢?

【问题讨论】:

    标签: ios swift uiimageview uiimage


    【解决方案1】:

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

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

    使用:

    myImageView.setImageWithURL(url!)

    【讨论】:

    • 哦,这个解释很好。从来没想过需要切换到主线程。谢谢你。你建议的方法是异步的吗?
    • @friendq 是的,它是异步的
    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    相关资源
    最近更新 更多