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中单独复制另一个图标。是否有方法获得更高分辨率的图像?