我目前正在开发一个从JSON中检索url的应用程序,并使用URLS创建一些ImageView。 当我解码我的JSON时,我将每个URL存入一个数组。
问题是,如何为我的阵列中的每个URL创建一个ImageView?
这是我的代码:
if(success == 1)
{
DataFromJSon = jsonData["objects"] as! NSArray
repos.removeAll()
for one in DataFromJSon {
let repo = Repository(jsonData: one as! [String : AnyObject])
repos.append(repo)
}
for repo in repos {
lines.insert(repo.picture_url, atIndex: i)
dump(lines)
i++
}
//Construct the imgUrl to get an image URL for the pages
if let urlString: NSString = MyArray {
if let url = NSURL(string: urlString as String) {
if let data = NSData(contentsOfURL: url) {
newCard.image = UIImage(data: data)!
newCard.content = titleApp
newCard.desc = prixApp
self.data.append(newCard)
NSLog("fetch new data")
}
}
}
}
谢谢!
小心:
答案 0 :(得分:0)
这是一个最低限度的工作示例
var urls = [NSURL]()
urls.append(NSURL(string: "https://yourimage1")!)
urls.append(NSURL(string: "https://yourimage2")!)
for url in urls {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
if let data = NSData(contentsOfURL: url) {
let image = UIImage(data: data)!
let view = UIImageView(image: image)
dispatch_async(dispatch_get_main_queue()) {
// Display your view here
}
}
}
}
正如@Abizern所提到的,您应该将数据下载放在后台队列中,并使用主队列来更新UI。您可以通过设置UIImageView的大小来缩放图像,然后根据需要在contentMode属性上使用.ScaleAspectFit
或.ScaleAspectFill
。
修改强>
我刚用你提供的图片链接对它进行了测试,代码运行正常。
var urls = [NSURL]()
urls.append(NSURL(string: "http://www.parkers.co.uk/Images/PageFiles/74655/firstdrive9.jpg")!)
urls.append(NSURL(string: "http://www.rsiauto.fr/images/BMW/330-Ci/330-Ci-1.jpg")!)
var i = 0
let width = self.view.frame.width/2
let height = self.view.frame.height
for url in urls {
dispatch_async(dispatch_get_global_queue(QOS_CLASS_BACKGROUND, 0)) {
if let data = NSData(contentsOfURL: url) {
let image = UIImage(data: data)!
let frame = CGRectMake(CGFloat(i++)*width, 0, width, height)
i++
let view = UIImageView(image: image)
view.frame = frame
view.contentMode = .ScaleAspectFit
view.layer.masksToBounds = true
view.backgroundColor = UIColor.redColor()
dispatch_async(dispatch_get_main_queue()) {
self.view.addSubview(view)
print("Done")
}
}
}
}
这是一个截图