我正在尝试将其他图像添加到我的UITATION VIEWCONTROLLER中,并且创建了一个函数,该函数从捆绑包中读取,其中包含呈现所需的所有图像。问题在于,某些图像在创建UIImage对象时返回无零,而另一些图像则可以用作UIIMAGE。我不确定导致此问题的原因是什么,因为图像位于捆绑包内并预览它的工作。谢谢!
//Retrieve Icons
//Read from file path and append it to an array.
//Retrieve Icons
//Read from file path and append it to an array.
private func loadIcons() {
let fileManager = FileManager.default
let bundleURL = Bundle.main.bundleURL
let assetURL = bundleURL.appendingPathComponent("UIAssets.bundle")
let contents = try! fileManager.contentsOfDirectory(at: assetURL, includingPropertiesForKeys: [URLResourceKey.nameKey, URLResourceKey.isDirectoryKey], options: .skipsHiddenFiles)
//BUG: doesnt work with some png/jpg image is returning nil
for item in contents {
let itemStr = item.absoluteString
if itemStr.contains("png") || itemStr.contains("jpg"){
let imageName = (itemStr as NSString).lastPathComponent
print(imageName)
let image = UIImage(named: imageName)
self.models[imageName] = image
}
}
}
我很惊讶它适用于任何图像,因为 UIImage(named:)
不适合您主束子目录内的图像。它只查看主捆绑包的最高级别。
但是,解决方案很简单:不要使用UIImage(named:)
。也不要使用路径名。绝对没有必要。您手中有解决方案:contentsOfDirectory(at:)
返回一个URL数组,因此,当您说for item in contents
时,每个item
is 是您的图像之一的URL。因此,您可以直接加载item
。调用Data(contentsOf:item)
获取文件数据,然后使用UIImage(data:)
将其转换为图像。