来自带URL的数组的UIImage

时间:2015-09-22 14:40:32

标签: arrays json swift uiimageview

我目前正在开发一个从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")
                        }
                    }
                }
             }  

谢谢!

小心:

GIF Swype

1 个答案:

答案 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")
                }
            }
        }
    }

这是一个截图

Screenshot