动态处理多维数组作为 UIImage 数组

Posted

技术标签:

【中文标题】动态处理多维数组作为 UIImage 数组【英文标题】:Work with multi-diminutional array dynamically as UIImage array 【发布时间】:2015-08-03 11:40:30 【问题描述】:

我正在开发应用程序来在滚动视图中制作分页照片,就像在照片应用程序中一样,向右滑动以获取旧照片,向左滑动以获取新照片,直到照片结束。

好的,所以我从网络上以多维度的形式获取照片:

imageArray[indexPath.row][0] as? String

ViewController1 中显示 CollectionView 中的所有图像。

当用户按下照片时,我会继续并在ViewController2 中显示更大的图像,因此如果向左滑动它会显示新照片,向右滑动会显示存储在数组中的旧照片。

但我需要将我的二维数组转换为一个并动态使用它来像这样:

pageImages = [UIImage(named:"photo1.png")!,
    UIImage(named:"photo2.png")!,
    UIImage(named:"photo3.png")!,
    UIImage(named:"photo4.png")!,
    UIImage(named:"photo5.png")!]

怎么可能呢?

我可以这样说:

pageImages = [UIimage(named:thewholearray)]?

我首先尝试转换为一维数组,但失败了:

var imageArray : NSArray = []

var mybigarray : NSArray = []
    for (var i=0; i<=self.imageArray.count; i++) 

        self.mybigarray = self.imageArray[i][0] as! NSArray

    

产生这个转换错误:

Could not cast value of type '__NSCFString' (0x196806958) to 'NSArray' (0x196807308).

【问题讨论】:

【参考方案1】:

您可以使用 map 函数从多维数组中提取图像名称。

var imageNames:[String] = imageArray.map(
    $0[0] as! String
)

map 函数像 for-in-loop 一样遍历所有数组条目。 闭包中的语句确定 imageNames 数组的新条目。

编辑:

如果你不使用 Swift-Arrays:

var imageNames:NSMutableArray = []
for image in imageArray
    imageNames.addObject(image[0] as! String)

【讨论】:

NSArray 没有名为 map 的成员? 太好了,最后一件事如果我需要使用 imageNames 作为 UIImage 数组作为我的问题,怎么可能? imageNames.addObject(UIImage(named: "\(image[0] as!String)")!) @AaoIi,我写的是图片。我不明白你还想要什么。 请澄清您的问题【参考方案2】:

我查看了教程,我认为这将有助于 Daniel 的回答。保留 Daniel 的答案并使用带有扩展名的数组中的 URL。 添加它以从 URL 中创建图像

extension UIImageView 
    public func imageFromUrl(urlString: String) 
        if let url = NSURL(string: urlString) 
            let request = NSURLRequest(URL: url)
            NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) 
                (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
                if data != nil 
                    self.image = UIImage(data: data)
                
                else 
                    self.image = UIImage()
                
            
        
    

在 PagedImageScrollViewController 中使用它:

newPageView.imageFromUrl(pageImages[page])

pageImages 是您的字符串数组。

【讨论】:

当然我会保留它,我正在使用 SDWebImage 库来显示图像,那么如何在没有扩展的情况下做到这一点? github.com/rs/SDWebImage,我试着像 let newPageView = UIImageView(image: pageImages[page] as! UIImage) newPageView.sd_setImageWithURL(url) 那样做,但它说 Could not cast value of type '__NSCFString' (0x196806958) to 'UIImage' (0x19746a698). 对不起,我对 SDWebImage 库不熟悉。该错误看起来像是因为您的 pageImages 是一个字符串数组,并且您试图将字符串设置为图像。如果您找不到解决方案,我可以稍后再查看 SDWebImage 库。也许您可以操纵扩展以满足您的需求?

以上是关于动态处理多维数组作为 UIImage 数组的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Java 中动态构建多维数组?

动态大小的多维数组的 C++ 解决方法

将多维数组插入另一个多维数组

多维动态数组,为啥不起作用?

动态创建多维对象/数组

如何分配动态静态多维数组