22

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

你如何加载它?我尝试了以下方法,它们都返回nil

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

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

4

3 回答 3

23

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

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

等等。

因此,使用[UIImage imageNamed:@"AppIcon76x76"]或类似的作品。

这是在某处记录的吗?

于 2013-10-25T10:28:38.920 回答
18

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

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

在这种情况下,我们将获取 CFBundleIconFiles 数组的最后一个图像 URL。它具有最大的分辨率。如果您需要更小的分辨率,请更改此设置。

于 2014-05-21T18:26:37.913 回答
4

按照 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)
于 2018-12-06T12:02:28.393 回答