Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.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
Ios 从xcassets加载应用程序图标_Ios_Ios7_Xcode5 - Fatal编程技术网

Ios 从xcassets加载应用程序图标

Ios 从xcassets加载应用程序图标,ios,ios7,xcode5,Ios,Ios7,Xcode5,我想在我的应用程序中显示应用程序图标。该图标位于默认资源目录(Images.xcsets)中 如何加载?我尝试了以下操作,它们都返回了nil: image = [UIImage imageNamed:@"AppIcon"]; image = [UIImage imageNamed:@"icon"]; image = [UIImage imageNamed:@"icon-76"]; image = [UIImage imageNamed:@"icon-60"]; 资产目录中的其他图像按预期工作。

我想在我的应用程序中显示应用程序图标。该图标位于默认资源目录(
Images.xcsets
)中

如何加载?我尝试了以下操作,它们都返回了
nil

image = [UIImage imageNamed:@"AppIcon"];
image = [UIImage imageNamed:@"icon"];
image = [UIImage imageNamed:@"icon-76"];
image = [UIImage imageNamed:@"icon-60"];

资产目录中的其他图像按预期工作。

通过检查捆绑包,我发现图标图像被重命名为:

AppIcon76x76~ipad.png
AppIcon76x76@2x~ipad.png
AppIcon60x60@2x.png
等等

因此,使用
[UIImage ImageName:@“AppIcon76x76”]
或类似作品


这是否有文档记录?

我建议通过检查
Info.plist
来检索图标URL,因为无法保证图标文件的命名方式:

NSDictionary *infoPlist = [[NSBundle mainBundle] infoDictionary];
NSString *icon = [[infoPlist valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"] lastObject];
imageView.image = [UIImage imageNamed:icon]; 

在本例中,我们获取CbundleConfiles数组的最后一个图像URL。它有最大的分辨率。如果您需要较小的分辨率,请更改此选项。

按照Ortwin的回答,采用Swift 4方法:

func getHighResolutionAppIconName() -> String? {
    guard let infoPlist = Bundle.main.infoDictionary else { return nil }
    guard let bundleIcons = infoPlist["CFBundleIcons"] as? NSDictionary else { return nil }
    guard let bundlePrimaryIcon = bundleIcons["CFBundlePrimaryIcon"] as? NSDictionary else { return nil }
    guard let bundleIconFiles = bundlePrimaryIcon["CFBundleIconFiles"] as? NSArray else { return nil }
    guard let appIcon = bundleIconFiles.lastObject as? String else { return nil }
    return appIcon
}
然后它可以像这样使用:

let imageName = getHighResolutionAppIconName()
myImageView.image = UIImage(named: imageName)

有趣的建议。确认
AppIcon
名称是否为公共API会很好。在我的例子中,图标的名称不同。所以我不会完全依赖于这个名字。为什么不在设置了“图标”之后就这么简单呢?imageView.image=[UIImage ImageName:图标]@罗伯托,布拉蒂你完全正确,这样比较容易。在我的特殊情况下,我实际上需要URL,但要创建一个图像,这样更容易。我改变了答案。谢谢,@Yossi,好多了。我已经编辑了答案。这里似乎有文档:这样做很危险。苹果可能会改变命名惯例,你的应用程序在将来也会中断。我的建议是在image.xcsete中单独复制另一个图标。是否有方法获得更高分辨率的图像?