【问题标题】:iOS Alternate Icon not changingiOS备用图标没有改变
【发布时间】:2018-07-01 01:34:40
【问题描述】:

我遵循了一些关于在 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)")
        })
    }
  }
}

当方法被调用时,我会提示说

您已更改“应用程序”的图标。

但是显示的图标是默认的 我的图标文件被命名为:six@2x.png, Six@3x.png, crazy@2x.png, crazy@3x.png, default@2x.png, default@3x.png 为什么它没有改变?将图像文件放入项目中是否有任何特殊步骤?我已经把我的放在“res”文件夹中了

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

【问题讨论】:

  • 请进一步澄清您的问题,您到底想要什么。
  • 查看此链接:medium.com/@same7mabrouk/…
  • UIApplication 上有一个名为 alternativeIconName 的属性,对于调试,在尝试更改之前打印名称会很有用。查看是否包含任何路径信息。
  • 它打印出正确的图标名称,但不会改变。
  • 我下载了你的项目我发现了一堆错误。您的图像不是 png 文件。如果您将它们重新保存为 png 它就可以工作。

标签: ios swift


【解决方案1】:

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

在我的例子中,我在我创建的视图控制器中的viewDidLoad() 方法中触发了UIApplication.shared.setAlternateIconName("ICON_NAME"),就在触发启动屏幕之后,称为AfterSplashViewController

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

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

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

编码愉快。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 什么是“不正确”?你做了什么改变来解决它?
    • 我在 Mac 上使用Preview 应用程序再次保存了它们,之后它运行良好
    • 这有帮助!我遇到了与 OP 完全相同的问题。我的图标文件保存为 JPG。一旦我将它们保存为 PNG,图标就会正确更改。
    猜你喜欢
    • 2016-03-29
    • 2019-05-26
    • 2012-08-05
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多