整这东西整了一晚上,国内关于技术的文章实在是太不严谨了,小细节导致我走了很多弯路,最后在国外网站上找到的正确答案
参阅 https://www.hackingwithswift.com/example-code/uikit/how-to-change-your-app-icon-dynamically-with-setalternateiconname

准备材料

要替换的app图标文件(大小就按照普通的App尺寸来,iOS 有20x20,29x29,40x40,60x60)
像这样的一组图片,后面会用到

在开始之前,先看下怎么实现图标变化

在动态更换图标,用的方法是 UIApplication 的

func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)

其方法的说明是这样的

其中最主要的是就是 这个 alternateIconName 的 String 传的是什么,知道这个传的是什么就完活儿。这里不是 Assets.xcassets 中的名字,也不是项目目录中图片的名字。

这里的 String 应该是 在 Info.plist中定义的 可替换图标 的名字,具体看下面


1,拖动替换的app图标到项目中

把上面提到的图片放在项目目录中,而不是 Assets.xcassets 中!,这地方一定要注意;这组图片的目录结构无所谓,在文件夹中或根目录都无所谓。

原始图标还是正常的放在 Assets.xcassets 中,正常使用

2,配置Info.plist

我写这文章的时候用的是 xcode 8.3.3, Info.plist 显示的是这样的,我们要修改的就是最下面那个 Icon files 的内容
(这里说一点,其实,Icon files 这个名字只是个注释的名字,其真字段名并不是这个,你可以在 Info.plist 界面上右击 选择 Show Raw Key/Value,就会看到下面的样子

显示原始字段名和值:

说下 CFBundleIcons 结构: 参阅官方文档 :关于CFBundleIcons 的说明

  • CFBundleIcons //有三个主分支,其它两个的子分支就不说了,自己看文档吧,这里主要说中间那个

    • CFBundlePrimaryIcon // 程序主图标
    • CFBundleAlternateIcons // 可替换图标,我们主要说这个,它的子分支如下
      • 图标名称-1

        • CFBundleIconFiles // 要替换的图标各尺寸集合

          • item0
          • item1
          • item2
        • UIPrerenderedIcon // 是否需要高光显示图标
      • 图标名称-2
        • CFBundleIconFiles // 要替换的图标各尺寸集合

          • item0
          • item1
          • item2
        • UIPrerenderedIcon
    • UINewsstandIcon

再给个图

也就是说,每个可替换的图标的内容都是固定的,就照着来就行。 CFBundleIconFiles 是个图片名称的数组,可以添加多个,系统会自动选择需要的图片大小,所以你把 20 29 40 60 的图片都放里面就好了。

最终的 Info.plist 是这样的,希望你能看明白,里面的 FullMoonHalfMoon 就是两个图标集合了,使用的时候,就是用这两个名字。

FullMoon_20, FullMoon_29 等等,就是图片原始名,直接指向项目目录中的图片,写的时候不要写 @2x@3x 了,


在程序中实现代码就行了

上面的如果做好了,这里就只需要调用一下之前的那个方法

func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)let  application = UIApplication.shared
application.setAlternateIconName("FullMoon", completionHandler: { (error) in// 写你需要做的东西
})application.setAlternateIconName("HalfMoon", completionHandler: { (error) in// 写你需要做的东西
})如果想让图标回到原始图标,设为 nil 即可
application.setAlternateIconName( nil , completionHandler: { (error) in// 写你需要做的东西
})

可能说的不是太清楚,有什么不太清楚的再留言问我吧

iOS 动态改变应用图标相关推荐

  1. Android 动态改变桌面图标

    其实很简单,利用 AndroidManifest.xml 文件中的 <activity-alias> 标签即可实现. <activity-alias> 介绍 大家知道,对于 A ...

  2. iOS动态修改app图标

    动态修改app的图标,就是在不重新安装app的情况下,可以修改当前的icon图标:在某些情况下,是有这个需求的:例如,可以更换主题的app中,一般都会有一套完整的主题包含相应的icon:还有就是一些节 ...

  3. iOS动态修改app 图标(icon)

    作者:流火绯瞳 链接:https://www.jianshu.com/p/69313970d0e7 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. Demo地址 ht ...

  4. iOS 动态改变字体

    方法1:一次改变,利用Runtime进行处理,对UILabel写一个Category 方法2:动态改变,当设置字体后,当前已创建的均需要改变,通知 // // UILabel+ChangeFont.m ...

  5. uniapp 使用map组件 动态自定义标记点图标及内容文字

    先看效果 地图中的标记点 可以动态变化自定义的图片与内容 原理 通过map组件中的 markers 属性 设置标记点 用于在地图上显示标记的位置 map组件所在uniapp官网位置:map-uni-a ...

  6. (0042) iOS 开发之iOS10.3新特性:如何动态更换APP图标

    iOS新特性: iOS10.3教你如何动态更换APP图标? 1.iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个: [[UIApplication sharedApplicat ...

  7. 用线程实现动态改变图标

    用线程实现动态改变图标 作者:cj_ict 下载本文示例代码 前几天看了一个<如何在标题栏中显示动态图标>文章,作者为重庆建设集团一所 唐星彬.觉得用SetTimer实现起来麻烦,且占用资 ...

  8. 如何动态改变audio的播放的src

    如何动态改变audio的播放的src 一.总结 一句话总结:js方式在请求外部网站的时候行,php方式在请求内外部资源都行.因为php走在js前面,所以问题可以从php方面想办法. 1.如何使用js控 ...

  9. html动态资源加载进度,JavaScript_快速解决js动态改变dom元素属性后页面及时渲染的问题,今天实现一个进度条加载过程 - phpStudy...

    快速解决js动态改变dom元素属性后页面及时渲染的问题 今天实现一个进度条加载过程,dom结构其实就是两个div 控制里层div的宽width属性,就能实现进度条往前走的效果. 我的进度条是显示下载文 ...

最新文章

  1. Django之路——6 Django的模型层(一)
  2. Power BI 可视化交互/视觉对象交互
  3. 王守仁的学前教育思想
  4. 最美四门轿跑车斯柯达Coupe面世,CC也害怕。
  5. CVPR 2018现场见闻
  6. 自制一个 简易jQuery 的 API
  7. 第8章:Hadoop再探讨
  8. Android内存管理机制
  9. 牛客网刷题(纯java题型 31~60题)
  10. C语言和设计模式(享元模式)
  11. python动态图形_利用matplotlib实现根据实时数据动态更新图形
  12. 测试TF card 的读写速度
  13. 线性代数----逆矩阵的性质和求法
  14. 网络1712--c语言函数作业总结
  15. 人参果水果宣传文案模版,水果店文案人参果
  16. HTML+JS 动态爱心效果,表白神器,装逼特效
  17. mongodb异常恢复 --repair
  18. QOS概述(四)拥塞管理和拥塞避免
  19. 插入排序(动图理解)
  20. 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)

热门文章

  1. 计算机专业普渡大学全美排名,2019普渡大学USNews排名
  2. 当前市场主流蓝牙音频SOC
  3. 微信小程序之setData用法
  4. Android 实现一个简单的文件下载工具
  5. 电子版寸照可以在手机上修改底色吗
  6. 用Python实现冰雹猜想(3n+1猜想,角谷猜想,叙古拉猜想)的黑洞演示
  7. Android ReactNative 极光、友盟、高德地图、支付宝、微信支付解决方案
  8. python基础教程视频纸飞机_python:turtle库绘制纸飞机
  9. Data Model(数据模型)
  10. UOS永久挂载smb共享文件夹