从xcassets加载应用程序图标

时间:2013-10-25 10:18:43

标签: ios ios7 xcode5

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

你如何加载它?我尝试了以下内容,他们都返回nil

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

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

3 个答案:

答案 0 :(得分:23)

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

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

等等。

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

这是在某处记录的吗?

答案 1 :(得分:15)

我建议通过检查Info.plist来检索图标网址,因为不能保证图标文件的名称如何命名:

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

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

答案 2 :(得分:2)

以下是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)