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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值