iOS Alternate Icon不变

时间:2018-01-22 12:07:43

标签: ios swift

我已经按照几个关于在iOS中设置替代图标的教程,但我无法使其正常工作。我的Info.plist中的重要部分如下所示:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>default</string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>six</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>six</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>crazy</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>crazy</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

视图控制器的代码非常简单:

class ViewController: UIViewController {

@IBOutlet weak var segment: UISegmentedControl!

override func viewDidLoad() {
    super.viewDidLoad()
    segment.addTarget(self, action: #selector(segmentChanged(_:)), for: .valueChanged)
    // Do any additional setup after loading the view, typically from a nib.
}

@objc func segmentChanged(_ sender: UISegmentedControl) {
    var icon: String?
    switch sender.selectedSegmentIndex {
    case 1:
        icon = "six"
    case 2:
        icon = "crazy"
    default:
        icon = nil
    }
    changeIcon(icon)
}

func changeIcon(_ icon: String?) {
    if UIApplication.shared.supportsAlternateIcons {
        UIApplication.shared.setAlternateIconName(icon, completionHandler: { (error) in
            print("\(error?.localizedDescription)")
        })
    }
  }
}

当方法被调用时,我得到提示

  

您已更改&#34; App&#34;。

的图标

但显示的图标是默认图标 我的图标文件名为:six@2x.png,six @ 3x.png,crazy @ 2x.png,crazy @ 3x.png,default @ 2x.png,default @ 3x.png 为什么不改变?是否有任何特殊步骤将图像文件放入项目中?我把我的东西放在&#34; res&#34;夹

项目: https://www.dropbox.com/s/nboslz2s6gagvwl/AltIcon.zip?dl=0

2 个答案:

答案 0 :(得分:0)

原来我用来缩小图像的软件存在问题,它没有正确保存PNG文件。

答案 1 :(得分:0)

研究了几分钟,终于找到了我的错。如果您的实施看起来很完美并且没有理由不工作,那么重点是:

在我的例子中,我在我创建的视图控制器的 UIApplication.shared.setAlternateIconName("ICON_NAME") 方法中触发了 viewDidLoad(),紧接着触发了启动画面,称为 AfterSplashViewController

这个视图控制器就像一个路由器,看起来尽可能一样的启动屏幕也有几个业务逻辑,比如到应用程序或登录屏幕的路由等。

长话短说,在调用 setAlternateIconName() 方法后,系统会向用户显示一个弹出窗口,以使用默认文本通知应用图标更改。在您的情况下,如果您的逻辑因某种原因没有时间显示此弹出窗口,则此方法将不起作用,您的应用图标也不会更改。

确保在您的代码库中触发“setAlternateIconName()”方法,就在正确的位置。

快乐编码。