【问题标题】:How to get UIImage of AppIcon?如何获取 AppIcon 的 UIImage?
【发布时间】:2014-05-13 13:22:09
【问题描述】:

我正在使用 Assets Catalog,在资产中添加各种大小的应用程序图标是可以的。

但是当我尝试以编程方式获取 UIImage 时,它​​返回 nil。

UIImage *appIcon = [UIImage imageNamed"AppIcon"];

应用图标名为AppIcon(默认),实际文件为app-icon-256.png等。

我还注意到,与普通图像不同,应用程序图标位于目录AppIcon.appiconset 中的“应用程序图标”集中。普通图片在someimage.imageset目录下。

【问题讨论】:

  • 您需要指定文件结尾。即文件名.png
  • @Rax,不,你没有。 On iOS 4 and later, if the file is in PNG format, it is not necessary to specify the .PNG filename extension.
  • "AppIcon.png" 或 "AppIcon.jpg" 无论你的扩展是什么,都可以工作!
  • @Rax,那没用。你能确认一下吗?
  • 具有讽刺意味的是,请在此处查看@samwize 答案:stackoverflow.com/a/51241158/397210

标签: ios objective-c xcode uiimage


【解决方案1】:

问题是资产目录中的AppIcon在编译后没有放在目录中。将它复制到您的应用程序包中,就像以前一样。

将图标复制到 app bundle 时使用的名称转换为AppIcon<size>.png,其中大小例如为40x4072x72

您可以通过指定所需应用图标的大小来获取应用图标:

UIImage *appIcon = [UIImage imageNamed:@"AppIcon40x40"];

【讨论】:

  • 这可行,尽管我的应用程序包中只有 29x29、40x40 和 60x60。如果有更好的方法来加载我的 256pt 应用程序图标会很棒。现在接受这个作为答案。谢谢!
  • 由于没有图标大小 256,我最好的猜测是将此大小作为单独的图像添加到资产目录中。
  • 如果我有两个大小相同的图标,如何获取指定图标? (iPad 聚光灯图标和 iPhone 聚光灯图标都是 40x40)
  • 我希望我可以欺骗界面生成器,但指定图像名称(在光盘名称上)或上面提到的变体可能会起作用。叹息。
  • 这似乎不再适用于 iOS 10、Xcode 8、Swift。
【解决方案2】:

>iOS10 的答案是:

复制并粘贴此扩展程序。

extension Bundle {
  
  var icon: UIImage? {
    
    if let icons = infoDictionary?["CFBundleIcons"] as? [String: Any],
       let primary = icons["CFBundlePrimaryIcon"] as? [String: Any],
       let files = primary["CFBundleIconFiles"] as? [String],
       let icon = files.last
    {
      return UIImage(named: icon)
    }
    
    return nil
  }
}

那就这样称呼吧:

Bundle.main.icon

SwiftUI

Image(uiImage: Bundle.main.icon ?? UIImage())

【讨论】:

  • 这在预览中不起作用,而 stackoverflow.com/a/62064533/3804991 可以
  • @ViktorSec 也许,但不幸的是,简单地使用“AppIcon”作为文件名将加载图像的最小分辨率,而这个答案加载最高分辨率。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2010-11-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多