Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays UIImage来自具有URL的数组_Arrays_Json_Swift_Uiimageview - Fatal编程技术网

Arrays UIImage来自具有URL的数组

Arrays UIImage来自具有URL的数组,arrays,json,swift,uiimageview,Arrays,Json,Swift,Uiimageview,我目前正在开发一个从JSON检索url的应用程序,并使用url创建一些ImageView。 当我解码JSON时,我将每个URL存储到一个数组中 问题是,如何为数组中的每个URL创建ImageView 这是我的代码: if(success == 1) { DataFromJSon = jsonData["objects"] as! NSArray repos.removeAll() for one in DataFr

我目前正在开发一个从JSON检索url的应用程序,并使用url创建一些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")
                        }
                    }
                }
             }  
谢谢大家!

注意:


以下是一个最低限度的工作示例

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属性上使用
.scaleSpectFit
.scaleSpectFill
来缩放图像

编辑

我刚刚用您提供的imagelinks对其进行了测试,代码运行良好

    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")
                }
            }
        }
    }
这里是截图


请告诉我,如果让data=NSData(contentsofull:url)在主线程上运行,您没有运行
?实际上,我在主线程上使用它,至少,我认为,问题出在哪里?您在主线程上运行了一个长时间运行的进程,这会阻塞主线程并使UI无响应。由于这个原因,网络操作通常在后台线程上执行。嗯,是的,我理解,你是对的,我使用这个函数,但在我另一个类的另一个线程中。但这并不是很重要,我的应用程序不在prod中,只是为了测试,但谢谢你的建议:)你好,谢谢你的代码,我已经更改了代码,以便在后台队列中进行网络操作。此外,我尝试了你的解决方案,但不起作用,我得到了两个图像视图,但具有相同的图片。对于相同的图片,你是什么意思?是否将它们放在UIView上显示?请查看我编辑的文章。它总是显示相同的图片,而不是论文:;但是你看过GIF吗?我尝试实现“Swype手势”,顺便说一下,我不能使用子视图。对于每个图像,我称其为“NewCard.image”。我认为循环失败是因为有时我成功地显示了两个不同的图片,但有时没有。如果在分配时,newcard始终是同一个实例,那么当然,在设置图像时,每次都会覆盖它。