【问题标题】:Work with multi-diminutional array dynamically as UIImage array动态处理多维数组作为 UIImage 数组
【发布时间】: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).

【问题讨论】:

    标签: ios arrays swift uiimage


    【解决方案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 库。也许您可以操纵扩展以满足您的需求?
    猜你喜欢
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多