更换App Logo

作者: iLeooooo | 来源:发表于2018-09-23 12:30 被阅读83次

在iOS 10.3之后,苹果官方提供了相关的API来实现这个功能,主要是下面这几个方法:

API

extension UIApplication {

    // If false, alternate icons are not supported for the current process.
    @available(iOS 10.3, *)
    open var supportsAlternateIcons: Bool { get }
    
    // Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.
    @available(iOS 10.3, *)
    open func setAlternateIconName(_ alternateIconName: String?, completionHandler: ((Error?) -> Void)? = nil)
    
    // If `nil`, the primary application icon is being used.
    @available(iOS 10.3, *)
    open var alternateIconName: String? { get }
}

方法很简单,但是使用之前需要进行一些配置:

第一步:配置icon

添加图片icon
动态修改的icon不能放在 Assets.xcassets 里,但是正常的主icon还是可以在这里设置的,也可以按下面的方法来设置;
首先,把需要修改的icon放在一个文件夹内:


icon

也可以把需要的logo文件全部放进去

第二步:配置info.plist

在info.plist中右键 -> Add Row :
输入Icon... 会有提示,选择Icon files(iOS 5)


Icon files(iOS 5)
//这里的Icon files(iOS 5)是个字典,其中可包含的Key值有
CFBundlePrimaryIcon -> Primary Icon
CFBundleAlternateIcons
UINewsstandIcon -> Newsstand Icon

这里的Primary Icon是设置app的主icon,可以在这里的Icon files数组内添加,有多个的话,依次添加,也可以这里不用填写,直接在Assets.xcassets 里配置;

下面的Newsstand Icon,暂时用不到,不用管,也可以删除。
在 Icon files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典,在这个字典里配置我们所有需要动态修改的icon:键为icon的名称,值为一个字典(这个字典里包含两个键:CFBundleIconFiles,其值类型为Array,内容为icon的名称;UIPrerenderedIcon,其值类型为bool,内容为NO,也可以不加此key)


info.plist

这里的CFBundleIconFiles里面可以放多个尺寸的文件

第三步:编写代码
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        changeLogo(name: "rain")
    }
    
func changeLogo(name:String) -> Void {
    if #available(iOS 10.3, *) {
        if UIApplication.shared.supportsAlternateIcons {
            UIApplication.shared.setAlternateIconName(name) { (error) in
                if (error != nil) {
                    print("失败")
                } else {
                    print("成功")
                }
            }
        }
    } else {
        // Fallback on earlier versions
    } 
}

这样每次更换会有一个提示框,如下


提示框

相关文章

网友评论

    本文标题:更换App Logo

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