我正在尝试创建图像的集合视图。
我已尝试过这些解决方案,下载图像:
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()
}
答案 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 ... )