介紹
- Xcode 26 內(nèi)置了 Icon Composer 應(yīng)用,能夠創(chuàng)建
.icon的設(shè)計(jì)文件,可以讓開(kāi)發(fā)者與設(shè)計(jì)師創(chuàng)建符合 “Liquid Glass” 風(fēng)格的全平臺(tái)(iOS、macOS、
watchOS) App Icon。 - 通過(guò) Icon Composer 將設(shè)計(jì)好的
.icon文件導(dǎo)出,然后導(dǎo)入 iOS 項(xiàng)目,在項(xiàng)目設(shè)置中選擇該文件作為 App Icon,勾選Include all app icon assets,即可作為 App 的圖標(biāo)使用。
案例:動(dòng)態(tài)切換圖標(biāo)
- 代碼。
import UIKit
enum AppIcon: String, CaseIterable {
case defaultIcon
case redIcon
case greenIcon
case blueIcon
// icon文件的名稱(chēng)
var iconName: String? {
switch self {
case .defaultIcon:
return nil // 默認(rèn)圖標(biāo)
case .redIcon:
return "RedIcon" // 第1個(gè)icon
case .greenIcon:
return "GreenIcon" // 第2個(gè)icon
case .blueIcon:
return "BlueIcon" // 第3個(gè)icon
}
}
}
class ViewController: UIViewController {
lazy var segmentedControl: UISegmentedControl = {
let segmentedControl = UISegmentedControl(items: AppIcon.allCases.map { $0.rawValue })
segmentedControl.selectedSegmentIndex = 0
segmentedControl.translatesAutoresizingMaskIntoConstraints = false
segmentedControl.addTarget(self, action: #selector(valueChanged), for: .valueChanged)
return segmentedControl
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(segmentedControl)
NSLayoutConstraint.activate([
segmentedControl.centerXAnchor.constraint(equalTo: view.centerXAnchor),
segmentedControl.centerYAnchor.constraint(equalTo: view.centerYAnchor),
segmentedControl.leadingAnchor.constraint(greaterThanOrEqualTo: view.leadingAnchor, constant: 20),
segmentedControl.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -20)
])
}
@objc func valueChanged(_ sender: UISegmentedControl) {
let selectedIndex = sender.selectedSegmentIndex
let selectedIcon = AppIcon.allCases[selectedIndex]
if UIApplication.shared.supportsAlternateIcons {
UIApplication.shared.setAlternateIconName(selectedIcon.iconName) { error in
if error != nil {
print(error?.localizedDescription)
} else {
print("切換App圖標(biāo)成功")
}
}
} else {
print("不支持切換App圖標(biāo)")
}
}
}
- 效果。

切換App圖標(biāo).gif