美文网首页
iOS 动态设置AppIcon应用图标

iOS 动态设置AppIcon应用图标

作者: iOS小武哥 | 来源:发表于2019-04-16 17:15 被阅读0次

前提是操作系统在10.3或以上才可以。

可以点击 官方文档 查看
主要是下面的这个方法:
- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler;
我们可以新建一个项目Demo
1.注意:将需要更改的应用图标在工程中新建一个目录,不要放在Assets.xcassets这里面。如下图:
change.png

我这里面只是个例子,你需要把尺寸都填全了!!!

2.接下来配置info.plist文件:也可以参考官方文档: 链接点击 配置如下图:
123123.jpeg
解释如下:
  • 在info.plist新建一个key::Icon files (iOS 5) 类型为字典。

  • 在 Icon files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典。

  • 在这个字典里配置我们所有需要动态修改的应用图标。

  • 这里已图片名为key,也是一个字典,里面是CFBundleIconFiles:类型是数组,添加图片的各个尺寸。

  • UIPrerenderedIcon:为Boolean类型 为NO,也可以不设置。

  • 到这里基本的配置就完事了,接下来就是代码的实现了!
代码如下:
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.view.backgroundColor = [UIColor whiteColor];
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        [self changeIconAction];
    });
}
方法:
- (void)changeIconAction
{
    NSString *iconName = @"icon-60@2x";
    if (@available(iOS 10.3, *)) {
        [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
            if (error) {
                NSLog(@"更换图标失败 == %@", error);
            }
            else
            {
                NSLog(@"更换成功");
            }
            }];
    } else {
        // Fallback on earlier versions
        NSLog(@"不支持");
    }
}
然后运行Demo,效果图如下:
WechatIMG62.jpeg
  • 这个时候会弹出一个框,这是是系统弹出来的,提示你更改应用图标,一般我们不希望出现这个提示,我们可以使用RunTime动态替换方法去修改.
我们新建一个UIController的Category:代码如下:
#import "UIViewController+Category.h"
#import <objc/runtime.h>

@implementation UIViewController (Category)

+(void)load
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
        Method dismissAlertViewController = class_getInstanceMethod(self.class, @selector(dismissAlertViewControllerPresentViewController:animated:completion:));
        //runtime替换方法
        method_exchangeImplementations(presentM, dismissAlertViewController);
    });
}

- (void)dismissAlertViewControllerPresentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)animated completion:(void (^)(void))completion {
    
    if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
        UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
        if (alertController.title == nil && alertController.message == nil) {
            return;
        }
    }
    [self dismissAlertViewControllerPresentViewController:viewControllerToPresent animated:animated completion:completion];
}

@end

完成!!!

相关文章

网友评论

      本文标题:iOS 动态设置AppIcon应用图标

      本文链接:https://www.haomeiwen.com/subject/globwqtx.html