the*_*end 20 cocoa-touch uiapplication nsbundle ios
有没有办法在可可触摸应用程序中获取当前的应用程序图标?谢谢.
Sie*_*ult 16
接受的答案对我不起作用,我正在使用Xcode 5的Images.xcassets方法存储应用程序图标.这个修改对我有用:
UIImage *appIcon = [UIImage imageNamed: [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
如有疑问,只需使用lldb浏览主要包的infoDictionary.
Con*_*has 13
我的答案完全基于moosgummi's,但返回了UIImage.
UIImage *appIcon = [UIImage imageNamed: [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
所述UIImage自动选择合适的版本(正常,@2x,~ipad,~ipad@2x或任何未来的后缀).(顺便说一句,难道你不是只是讨厌识别图像版本的这个愚蠢的方案吗?它刚刚失控.感谢上帝的资产目录!)
Cod*_*der 11
这是一个Swift 4.x && 3.x扩展名,UIApplication用于获取应用程序图标.您可以根据从iconFiles阵列中提取的图标路径的位置来选择是获取最小或最大的图标.
extension UIApplication {
var icon: UIImage? {
guard let iconsDictionary = Bundle.main.infoDictionary?["CFBundleIcons"] as? NSDictionary,
let primaryIconsDictionary = iconsDictionary["CFBundlePrimaryIcon"] as? NSDictionary,
let iconFiles = primaryIconsDictionary["CFBundleIconFiles"] as? NSArray,
// First will be smallest for the device class, last will be the largest for device class
let lastIcon = iconFiles.lastObject as? String,
let icon = UIImage(named: lastIcon) else {
return nil
}
return icon
}
}
Run Code Online (Sandbox Code Playgroud)
要访问该图标,请调用以下内容:
let icon = UIApplication.shared.icon
Run Code Online (Sandbox Code Playgroud)
对于奖励积分,如果您的应用需要,您甚至可以制作两个变量以获得最小和最大的图标.
sam*_*ize 10
适用于Swift 4.1,并将其扩展为Bundle。
extension Bundle {
public var icon: UIImage? {
if let icons = infoDictionary?["CFBundleIcons"] as? [String: Any],
let primaryIcon = icons["CFBundlePrimaryIcon"] as? [String: Any],
let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
let lastIcon = iconFiles.last {
return UIImage(named: lastIcon)
}
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
要在应用中使用,请致电Bundle.main.icon。
这是在info.plist中设置图标的方式,
//try doing NSLog(@"%@",[[NSBundle mainBundle] infoDictionary]);
CFBundleIcons = {
CFBundlePrimaryIcon = {
CFBundleIconFiles = (
"icon.png",//App icon added by you
"icon@2x.png"//App icon in retina added by you
);
UIPrerenderedIcon = 1;
};
};
Run Code Online (Sandbox Code Playgroud)
如果您想获取应用程序图标,请使用以下代码:
UIImage *appIcon = [UIImage imageNamed: [[[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIcons"] objectForKey:@"CFBundlePrimaryIcon"] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
PS:UIImage会自动为视网膜显示选择合适的图标.
我希望它有所帮助!!
如果您使用资产目录,那么您可以简单地使用:
UIImage* appIcon = [UIImage imageNamed:@"AppIcon60x60"];
资产目录似乎标准化了应用程序图标的文件名.
当然,如果您需要列出捆绑中的所有应用程序图标,您可以在CFBundleIconFiles信息词典的分支中查找它.
使用KVC,您可以轻松地在一行代码中获得:
NSArray* allIcons = [[[NSBundle mainBundle] infoDictionary] valueForKeyPath:@"CFBundleIcons.CFBundlePrimaryIcon.CFBundleIconFiles"];
Run Code Online (Sandbox Code Playgroud)
生成的数组将包含捆绑包中可用的所有应用程序图标名称.任何这些名称都可用于检索图标+[UIImage imageNamed:]
<__NSCFArray 0x15d54260>(
AppIcon29x29,
AppIcon40x40,
AppIcon60x60
)
Run Code Online (Sandbox Code Playgroud)
这很容易,因为当前图标的文件名在Info.plist中设置:
NSString *filePath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"] objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
如果您想选择高分辨率版本,您应该使用:
NSString *filePath = nil;
for (NSString *fileName in [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIconFiles"]) {
if ([fileName rangeOfString:@"@2x"].location != NSNotFound) {
filePath = [[NSString alloc] initWithString:fileName];
}
}
Run Code Online (Sandbox Code Playgroud)
因为我花了一点时间才研究出来,这是一个有效的Swift解决方案.
let primaryIconsDictionary = NSBundle.mainBundle().infoDictionary?["CFBundleIcons"]?["CFBundlePrimaryIcon"] as? NSDictionary
let iconFiles = primaryIconsDictionary!["CFBundleIconFiles"] as NSArray
let lastIcon = iconFiles.lastObject as NSString //last seems to be largest, use first for smallest
let theIcon = UIImage(named: lastIcon)
let iconImageView = UIImageView(image: theIcon)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14142 次 |
| 最近记录: |