动态更改应用程序图标

自iOS 10.3起,Apple推出了一项很酷的功能,以便开发人员能够以编程方式更改应用程序图标。 尽管它不像带有运行时钟的官方Clock应用程序那么灵活,但我们仍然可以基于它来享受巨大的活力。 让我们看看它是如何工作的。

背后的理论

在Apple的API文档中,有三件事值得一看:

var supportsAlternateIcons: Bool { get } 
 var alternateIconName: String? { get } 
 func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil) 
  • supportsAlternateIcons是一个只读属性,它决定应用程序是否可以更改其图标。 为了实现它,我们需要在info.plist文件中设置替代图标,我们将在后面讨论。
  • AlternativeIconName也是一个只读属性,它是当前显示的替代应用程序图标的名称。 请注意,当应用程序显示其主要图标时,它为nil。
  • setAlternateIconName是用于设置要显示的图标的功能。 如果我们将图标名称设置为nil,则该应用将显示其主要图标。

有关更多详细信息,您可以参考Apple的官方API页面。

由于我们了解如何执行此操作,因此让我们进入Xcode并开始。

先决条件

首先,让我们为应用程序图标放置3张图像,分别是“ pichu.png”,“ pikachu.png”和“ raichu.png”。

请注意,如果将图标图像放在Assets目录下,则正确的位置在project目录下是没有用的 。 这是我的截图:

接下来,我们需要设置Info.plist。

  1. 将图标文件(iOS 5)添加到信息属性列表
  2. 将CFBundleAlternateIcons添加为字典,用于替代图标
  3. 在CFBundleAlternateIcons下设置3个字典,它们对应于“ pichu”,“ pikachua”和“ raichu”
  4. 对于每个字典,需要配置两个属性-UIPrerenderedIcon和CFBundleIconFiles

有关更多详细信息,您可以参考Apple的Core Foundation Keys页面。 这是我的info.plist的屏幕截图:

编码示例

让我们假设一个视图中有3个按钮。 点击其中任何一个,都会使该应用显示相应的图标。 这是示例代码:

  //将应用程序图标更改为“ pichu” 
@IBAction func pichuButtonDidTap(_发件人:UIButton){
  changeIcon(收件人:“ pichu”) 
  } 

//将应用程序图标更改为“皮卡丘”
  @IBAction func pikachuButtonDidTap(_ sender:UIButton){ 
  changeIcon(至:“皮卡丘”) 
  } 

//将应用程序图标更改为“ raichu”
  @IBAction func raichuButtonDidTap(_ sender:UIButton){ 
  changeIcon(收件人:“ raichu”) 
  } 

  func changeIcon(to iconName:String){ 
  // 1 
 保护UIApplication.shared.supportsAlternateIcons其他{ 
 返回 
  } 

// 2
  UIApplication.shared.setAlternateIconName(iconName,complementHandler:{(错误)在 
  // 3 
 如果让错误=错误{ 
 打印(“由于\(error.localizedDescription),应用图标无法更改”) 
  }其他{ 
 打印(“应用程序图标已成功更改”) 
  } 
  }) 
  } 
  1. 检查应用程序是否支持交替图标
  2. 将图标更改为具有给定名称的特定图像
  3. 应用图标更改后,打印我们的错误或成功消息

生成并运行该应用程序,欣赏表演!