从循环中的URL下载图像以获取集合视图

时间:2016-01-26 10:38:13

标签: ios swift image url networking

我正在尝试创建图像的集合视图。 我已尝试过这些解决方案,下载图像:
one
two
three

four

Get-PSDrive w |
  Where-Object { $_.Used / ($_.Used + $_.Free) -gt 0.7 } |
  ForEach-Object { & 'C:\path\to\other.ps1' }

但我无法显示图像。我是swift与网络联系的新手。

var tempObject = json["photos"]
                for var i = 0; i < tempObject.count; i++
                {
                    var tempImage = UIImage()

                    dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

                        tempImage =  UIImage(data: NSData(contentsOfURL: NSURL(string:"https://developer.apple.com/swift/images/swift-og.png")!)!)!
                    })

                    swiftImages.insert(tempImage, atIndex: i)
                }

                dispatch_async(dispatch_get_main_queue()) {

                    self.collectionView?.reloadData()
                }

2 个答案:

答案 0 :(得分:1)

您要将UIImage()(在dispatch_async阻止之前创建的对象)对象添加到swiftImages数组。请注意将来某个时间执行dispatch_async块,它不会在var tempImage = UIImage()行之后立即执行。从调度块内部抓取图像,也就是应该将调度发送到主队列以重新加载集合的位置。像这样更改你的代码:

            var tempObject = json["photos"]
            for var i = 0; i < tempObject.count; i++
            {
                dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

                    var tempImage =  UIImage(data: NSData(contentsOfURL: NSURL(string:"https://developer.apple.com/swift/images/swift-og.png")!)!)!
                    swiftImages.insert(tempImage, atIndex: i)
                    dispatch_async(dispatch_get_main_queue()) {

                       self.collectionView?.reloadData()
                    }
                })
            }

btw加载集合视图或表视图单元格的图像不只是阅读图像,您可能需要使用AlamofireImage之类的东西。

答案 1 :(得分:0)

此代码存在问题:

                var tempImage = UIImage()

                dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {

                    tempImage =  UIImage(data: NSData(contentsOfURL: NSURL(string:"https://developer.apple.com/swift/images/swift-og.png")!)!)!
                })

                swiftImages.insert(tempImage, atIndex: i)

tempImage始终为空,因为下载是异步的,您可以在下载完成之前将其插入swiftImages。

我建议你使用像SDWebImage这样的库。您无需手动下载。使用它非常简单,您可以免费获得所有网络:

import SDWebImage

let imageView = UIImageView()
imageView.sd_setImageWithURL( ... url ... )