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

2023-12-03 20:48

本文主要是介绍(0042) iOS 开发之iOS10.3新特性:如何动态更换APP图标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

iOS新特性: iOS10.3教你如何动态更换APP图标?

1、iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个:

  1. [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(  
  2.   
  3.  }];  

这是官方文档,但是你还需要在 info.plist 里面填一些东西才能让它起作用,这部分官方注释内容在这里。



2、 info.plist 如何填写呢?一时可能搞不清楚如何操作,下面做个实例:







3、具体如下:



[objc] view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  1. <key>CFBundleIcons</key>  
  2.     <dict>  
  3.         <key>CFBundleAlternateIcons</key>  
  4.         <dict>  
  5.             <key>newIcon</key>  
  6.             <dict>  
  7.                 <key>CFBundleIconFiles</key>  
  8.                 <array>  
  9.                     <string>newIcon</string>  
  10.                 </array>  
  11.                 <key>UIPrerenderedIcon</key>  
  12.                 <false/>  
  13.             </dict>  
  14.         </dict>  
  15.         <key>CFBundlePrimaryIcon</key>  
  16.         <dict>  
  17.             <key>CFBundleIconFiles</key>  
  18.             <array>  
  19.                 <string>Icon60X60</string>  
  20.             </array>  
  21.         </dict>  
  22.     </dict>  
<key>CFBundleIcons</key><dict><key>CFBundleAlternateIcons</key><dict><key>newIcon</key><dict><key>CFBundleIconFiles</key><array><string>newIcon</string></array><key>UIPrerenderedIcon</key><false/></dict></dict><key>CFBundlePrimaryIcon</key><dict><key>CFBundleIconFiles</key><array><string>Icon60X60</string></array></dict></dict>

如图,Primary Icon 字段写为 Icon60X60 是因为这里 xcassets 里面我只导入了 60pt@2x 和 60pt@3x 的图片资源,这里选为 60 是因为对于 iPhone,60pt 的图片资源图标所需最高质量,更低分辨率的版本系统会自动压缩以展示。

newIcon 是我的用于替换原生图标的图片资源。文件名需要和 info.plist 中保持一致(注意 info.plist 中用到了两次 "newIcon"),同时这也是你在代码中设置图标时,需要给 API 传入的参数。同样是 60pt@2x 和 60pt@3x 的图片资源,文件不通过 Assets.xcassets 添加进来,而是直接放到目录中。

如果你需要支持 iPad,建议这里使用 83.5pt(iPad Pro)的图片资源。另外还有些其他关于在 iPad 上替换图标的注意事项,在这里有说明,注意我们这里在 info.plist 里面所用的 key 是 CFBundleIcons,还有另外一个 key 是 CFBundleIcons~ipad

4、替换图标部分的代码:

[objc] view plain copy
print ? 在CODE上查看代码片 派生到我的代码片
  1. - (void)changeAppIcon  
  2. {  
  3.     if ([UIApplication sharedApplication].supportsAlternateIcons) {  
  4.         NSLog(@"you can change this app's icon");  
  5.     }else{  
  6.         NSLog(@"you can not change this app's icon");  
  7.         return;  
  8.     }  
  9.       
  10.     NSString *iconName = [[UIApplication sharedApplication] alternateIconName];  
  11.       
  12.     if (iconName) {  
  13.         // change to primary icon  
  14.         [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {  
  15.             if (error) {  
  16.                 NSLog(@"set icon error: %@",error);  
  17.             }  
  18.             NSLog(@"The alternate icon's name is %@",iconName);  
  19.         }];  
  20.     }else{  
  21.         // change to alterante icon  
  22.         [[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {  
  23.             if (error) {  
  24.                 NSLog(@"set icon error: %@",error);  
  25.             }  
  26.             NSLog(@"The alternate icon's name is %@",iconName);  
  27.         }];  
  28.     }  
  29. }  
- (void)changeAppIcon
{if ([UIApplication sharedApplication].supportsAlternateIcons) {NSLog(@"you can change this app's icon");}else{NSLog(@"you can not change this app's icon");return;}NSString *iconName = [[UIApplication sharedApplication] alternateIconName];if (iconName) {// change to primary icon[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"set icon error: %@",error);}NSLog(@"The alternate icon's name is %@",iconName);}];}else{// change to alterante icon[[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"set icon error: %@",error);}NSLog(@"The alternate icon's name is %@",iconName);}];}
}

5、最终效果如下:



Demo:GitHub  喜欢记得star一下哦!

这篇关于(0042) iOS 开发之iOS10.3新特性:如何动态更换APP图标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/450825

相关文章

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo