前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS 无弹框换图标,直接用就可以了

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

作者头像
菜菜不吃蔡
发布2018-08-03 16:40:43
7700
发布2018-08-03 16:40:43
举报
文章被收录于专栏:编程语言

  需求:换图标,用户无感

1.分析:

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

2.代码实现过程

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

代码语言:javascript
复制
<?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的代码:

代码语言:javascript
复制
#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);

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档