话不多说,直接进主题,注意几点。

1. 首先我们要知道更改APP的icon, 需要添加Info.plist 中的 Icon files (iOS 5) -> CFBundleAlternateIcons , 给CFBundleAlternateIcons 增加一些内容,这些内容就是你 icon 的图片名字。

2. 其次我们要知道,如果不额外处理,那么我们在更改icon 的时候系统会弹出提示框,告诉用户icon 已经更改, 这样的用户体验是不好的,所以一般都会增加扩展后静默更改icon。

3. 这种动态更改是需要提前为 图片 和 Info.plist 做好准备的,当然如果有特殊需求可以想想办法通过额外的逻辑完成。

4. 我们核心对象是‘UIAlternateApplicationIcons’ ,我会在后面上传一段Gif 和 三张截图,为你介绍这个功能。

下面是相关使用和扩展的代码 - 我知道有的小伙伴比较懒,直接复制就好

1.

#import "ViewController.h"@interface ViewController ()
@property (nonatomic, copy)NSString *str_IconName;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];_str_IconName = @"F";// Do any additional setup after loading the view.
}- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{if (![[UIApplication sharedApplication] supportsAlternateIcons]) {return;}if ([_str_IconName isEqualToString:@"F"]) {_str_IconName = @"S";}else{_str_IconName = @"F";}[[UIApplication sharedApplication] setAlternateIconName:_str_IconName completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"更换app图标发生错误了 : %@",error);}}];
}@end

2.

#import "UIViewController+Present.h"
#import <objc/runtime.h>@implementation UIViewController (Present)+ (void)load {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(dy_presentViewController:animated:completion:));// 交换方法实现method_exchangeImplementations(presentM, presentSwizzlingM);});
}
- (void)dy_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
//        NSLog(@"title : %@",((UIAlertController *)viewControllerToPresent).title);
//        NSLog(@"message : %@",((UIAlertController *)viewControllerToPresent).message);//这里只是判断了 如果UIAlertController 中title 和message 都没有信息 那么返回空,这样就不会弹框,当然你可以判断你需要的。UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;if (alertController.title == nil && alertController.message == nil) {NSLog(@"iconName = %@",[[UIApplication sharedApplication] alternateIconName]);return;} else {[self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];return;}}[self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];
}@end

以上就是让APP动态更改icon 的相关内容。

感谢学习,学以致用更感谢~

iOS - 让APP动态更改icon相关推荐

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

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

  2. 苹果不更新APP动态更换节假日Logo

    苹果不更新APP动态更换节假日Logo 动态修改app的图标,就是在不重新安装app的情况下,可以修改当前的icon图标在 iOS 10.3之后,苹果官方提供了相关的API来实现这个功能方法实现很简单 ...

  3. 手把手教你制作一款iOS越狱App,伪装微信位置

    说明 缘由 严重声明 概念 越狱的原理 iOS 目录层级结构 iOS 程序类型 准备工作 硬件设备 辅助软件 Mac 需要的工具 iOS 需要使用的辅助开发工具 逆向过程 静态分析 给App砸壳 使用 ...

  4. 【Android】动态更新Icon

    动态更改图标主要用到activity-alias和PackageManager的setComponentEnabledSetting方法.具体步骤如下: 1.在AndroidManifest.xml中 ...

  5. 动态更改屏幕方向LANDSCAPE与PORTRAIT 转

    动态更改屏幕方向--LANDSCAPE与PORTRAIT package irdc.ex05_22; import android.app.Activity; import android.conte ...

  6. Android动态修改icon

    Android动态修改icon 南京证券项目最近的需求之一,在某一时间时应用图标icon显示4.0icon,春节时显示春节icon,当春节过后,app需还原为默认icon,也就是有三个icon需要变化 ...

  7. iOS 的 APP 在系统中如何适配不同的屏幕的尺寸

    iOS 的 APP 在系统中如何适配不同的屏幕的尺寸 标签: 2007年,初代iPhone发布,屏幕的宽高是 320 x 480 像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone ...

  8. iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸

    iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸? 时间 2014-10-21 19:10:29   鸟哥笔记 原文  http://www.niaogebiji.co ...

  9. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

最新文章

  1. 例题2-1 在屏幕上显示一个短句。
  2. oracle tuning 工具
  3. Re:从 0 开始的微服务架构--(四)如何保障微服务架构下的数据一致性--转
  4. 轻松玩转jquery。
  5. CAD数据与ArcGIS数据的互转换(转载)
  6. Node.js meitulu图片批量下载爬虫1.051
  7. 最短路径——Dijkstra算法扩展(hdu2066,poj1062)
  8. java oo原则_javaOO11-12:面向对象的设计原则、线程
  9. Magicodes.Admin.Core开源框架总体介绍
  10. HttpClient的使用方法
  11. XQuery FLWOR 表达式
  12. VC6.0(VC++6.0)下载地址和安装教程(图解)
  13. 2021L3HCTF luuuuua Writeup
  14. 【华为机试真题 JAVA】最大股票收益-100
  15. 用防火墙自动拦截攻击IP
  16. 三菱PLC编程与案例精讲之ST语言
  17. SANY北京地区笔试题(研发类岗位)
  18. 南卡和三星哪款蓝牙耳机音质好些?高颜值且音质好的蓝牙耳机测评
  19. CDH数仓项目(一) —— CDH安装部署搭建详细流程
  20. FMT开源自驾仪 | FMT固定翼飞控系统首次测试

热门文章

  1. 杨元庆:联想华为各有所长 不能光看短期结果
  2. 剑指offerQ24二叉树中和为某一值的路径
  3. mysql 新建和删除数据库名有中横线
  4. 小苏的java学习之路
  5. Android平台GB28181设备接入端如何支持跨网段语音对讲
  6. SAP MTO案例教程AP应付会计前台操作
  7. python数字推盘游戏怎么显示步数_python初学---猜数字游戏(游戏与AI,原创)
  8. App渠道推广怎么统计?一张图讲解
  9. MyBatis 源码解读(零)导语
  10. Android:设计一个在屏幕上移动的小球程序