iOS 无弹框换图标,直接用就可以了

  需求:换图标,用户无感

1.分析:

        对于iOS,是开发了API可以换图标,但是有规定的,就是你要换的图标是要在APP里面内置的,也就是说你要换的APPicon,是提前放在APP 包里面的,具体后面会有解释,好吧直接上代码吧。

2.代码实现过程

    (1)Info.plist 配置,直接添加(以下代码直接复制到info.plist中):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>CFBundleAlternateIcons</key>
 <dict>
 <key>MayOneIcon</key>
 <dict>
 <key>CFBundleIconFiles</key>
 <array>
 <string>MayOneIcon</string>
 </array>
 <key>UIPrerenderedIcon</key>
 <false/>
 </dict>
 </dict>
 <key>UINewsstandIcon</key>
 <dict>
 <key>CFBundleIconFiles</key>
 <array>
 <string></string>
 </array>
 <key>UINewsstandBindingEdge</key>
 <string>UINewsstandBindingEdgeLeft</string>
 <key>UINewsstandBindingType</key>
 <string>UINewsstandBindingTypeMagazine</string>
 </dict>
</dict>
</plist>

    (2)导入预制的icon,120*120的就行了,然后名字要和plist里面的对应,我这里用的是MayOneIcon;(注)这个名字在plist里面有俩个地方需要修改。

     (3)在需要调用改图标的地方写入换icon的代码:

#pragma mark ExchengeIconMethod


/*  直接调用此方法,传入数据为iconName,也就是后台给你要换的图标

    默认传的是@"DefaultIcon"

*/

+ (void)chengeAppicon:(NSString*)iconNameNew{

    if (iconNameNew.length == 0) {

        return;

    }

    if ([UIApplication sharedApplication].supportsAlternateIcons) {

        NSLog(@"you canExchange");

    }else{

        NSLog(@"you can not Exchange");

        return;

    }

    

    NSString * iconname = [[UIApplication sharedApplication]alternateIconName];

    if ((!iconname&&[iconNameNew isEqualToString:@"DefaultIcon"]) || [iconname isEqualToString:iconNameNew]) {

        return;

    }

    [self exchangealterMethod];

    if ( [iconNameNew isEqualToString:@"DefaultIcon"]) {

        

        [[UIApplication sharedApplication]setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {

            if (error) {

                NSLog(@"error");

            }else

                NSLog(@"icon name:%@",iconname);

            

        }];

    }else{

        [[UIApplication sharedApplication]setAlternateIconName:iconNameNew completionHandler:^(NSError * _Nullable error) {

            

            if (error) {

                NSLog(@"error");

            }else

                NSLog(@"icon name:%@",iconname);

            

        }];

        

    }

    

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        [self exchangealterMethod];

    });

}



+ (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 *alertController = (UIAlertController *)viewControllerToPresent;

        if (alertController.title == nil && alertController.message == nil) {

            

            return;

        } else {

            [self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];

            return;

        }

    }

    

    [self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];

}

+ (void)exchangealterMethod{

    Method presentM = class_getInstanceMethod(UIViewController.class, @selector(presentViewController:animated:completion:));

    Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(dy_presentViewController:animated:completion:));

    

    method_exchangeImplementations(presentM, presentSwizzlingM);

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏移动端开发

WKWebView的使用与JS交互详细解读

前言:     WKWebView 这是在iOS8.0之后增加的一个比UIWebView更加完善和强大的控件!看网上关于它的博客也是有许多的了,从各个方面总结一...

4267
来自专栏编程语言

iOS 无弹框换图标,直接用就可以了

        对于iOS,是开发了API可以换图标,但是有规定的,就是你要换的图标是要在APP里面内置的,也就是说你要换的APPicon,是提前放在APP包里...

822
来自专栏Python疯子

Swift - 网页控件(UIWebView)加载本地数据,文件

使用UIWebView加载本地数据或资源有如下三种方式: 1,使用 **loadHTMLString **方法加载HTML内容 2,使用 **loadReq...

740
来自专栏朱慕之的博客

WKWebView

我们要通过JS与webview内容交互,就需要到这个类了,它的所有属性及方法说明如下:

1491
来自专栏移动开发面面观

iOS的WebView——WKWebView

2082
来自专栏移动端周边技术扩展

WKWebView实现简单的轻应用

2077
来自专栏向治洪

IOS WebView控件详解

概述 WebView就是一个内嵌浏览器控件,在iOS中主要有两种WebView:UIWebView和WKWebView,UIWebView是iOS2之后开始使用...

6196
来自专栏岑志军的专栏

WKWebView常见功能及如何返回上级界面

2283
来自专栏進无尽的文章

UI篇- UIWebView使用大全

UIWebView是常用开发控件,对于一些常用的设置是有必要记住或者记录下来的。 这里特别说一下,对于一个工程中整个就是一个WebView的情况,你可以通过一...

1371
来自专栏QQ空间开发团队的专栏

WKWebView 那些坑

WKWebView 是苹果在 WWDC 2014上推出的新一代 webView 组件,用以替代 UIKit 中笨重难用,本文主要讲述适配 WKWebView 过...

4.4K2

扫码关注云+社区

领取腾讯云代金券