我已经按照几个关于在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
答案 0 :(得分:0)
原来我用来缩小图像的软件存在问题,它没有正确保存PNG文件。
答案 1 :(得分:0)
研究了几分钟,终于找到了我的错。如果您的实施看起来很完美并且没有理由不工作,那么重点是:
在我的例子中,我在我创建的视图控制器的 UIApplication.shared.setAlternateIconName("ICON_NAME")
方法中触发了 viewDidLoad()
,紧接着触发了启动画面,称为 AfterSplashViewController
。
这个视图控制器就像一个路由器,看起来尽可能一样的启动屏幕也有几个业务逻辑,比如到应用程序或登录屏幕的路由等。
长话短说,在调用 setAlternateIconName()
方法后,系统会向用户显示一个弹出窗口,以使用默认文本通知应用图标更改。在您的情况下,如果您的逻辑因某种原因没有时间显示此弹出窗口,则此方法将不起作用,您的应用图标也不会更改。
确保在您的代码库中触发“setAlternateIconName()”方法,就在正确的位置。
快乐编码。