主icon 可放在Assets.xcassets 不动。
副icon 配置如图。副 icon 必须放文件夹里打包。

在 Icon files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典,在这个字典里配置我们所有需要动态修改的Icon1(或Icon2 ,自定义icon名称),值为一个字典 。添加数组 :CFBundleIconFiles。然后把图片名全部添加进来
主icon和两个福icon轮流使用的代码。一般可用于到日期更滑促销或活动的icon
// 动态icon
BOOL supportsAlternateIcons = [[UIApplication sharedApplication] supportsAlternateIcons];
if (supportsAlternateIcons) {
NSString *iconName = nil;
if ([[UIApplication sharedApplication] alternateIconName] == nil) { // 正在使用主icon
iconName = @"Icon1";
}else if ([[[UIApplication sharedApplication] alternateIconName] isEqualToString:@"Icon1"]){//
iconName = @"Icon2";
}
[[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
DLog(@"%@",error);
}];
}
@interface UIApplication (UIAlternateApplicationIcons)
// 如果为NO,表示当前进程不支持替换图标
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 传入nil代表使用主图标. 完成后的操作将会在任意的后台队列中异步执行; 如果需要更改UI,请确保在主队列中执行.
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 如果alternateIconName为nil,则代表当前使用的是主图标.
@property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
@end
网友评论