Load app icon from xcassets

好久不见. 提交于 2019-12-20 10:08:13

问题


I'd like to display the app icon inside my app. The icon is in the default assets catalog (Images.xcassets).

How do you load it? I tried the following and they all return nil:

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

Other images in the assets catalog work as expected.


回答1:


By inspecting the bundle I found that the icon images were renamed as:

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

And so on.

Thus, using [UIImage imageNamed:@"AppIcon76x76"] or similar works.

Is this documented somewhere?




回答2:


I recommend retrieving the icon URL by inspecting the Info.plist since there's no guarantee how the Icon files are named:

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

In this case we're fetching the last image URL of the CFBundleIconFiles array. It has the largest resolution. Change this if you need a smaller resolution.




回答3:


Following Ortwin answer, a Swift 4 approach:

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
}

Then it can be used like:

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


来源:https://stackoverflow.com/questions/19587139/load-app-icon-from-xcassets

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!