iOS26适配指南之Liquid Glass App Icon

介绍

  • Xcode 26 内置了 Icon Composer 应用,能够创建.icon的设计文件,可以让开发者与设计师创建符合 "Liquid Glass" 风格的全平台(iOS、macOS、 watchOS) App Icon。
  • 通过 Icon Composer 将设计好的.icon文件导出,然后导入 iOS 项目,在项目设置中选择该文件作为 App Icon,勾选Include all app icon assets,即可作为 App 的图标使用。

案例:动态切换图标

  • 代码。
swift 复制代码
import UIKit

enum AppIcon: String, CaseIterable {
    case defaultIcon
    case redIcon
    case greenIcon
    case blueIcon

    // icon文件的名称
    var iconName: String? {
        switch self {
        case .defaultIcon:
            return nil // 默认图标
        case .redIcon:
            return "RedIcon" // 第1个icon
        case .greenIcon:
            return "GreenIcon" // 第2个icon
        case .blueIcon:
            return "BlueIcon" // 第3个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图标成功")
                }
            }
        } else {
            print("不支持切换App图标")
        }
    }
}
  • 效果。
相关推荐
SY.ZHOU17 小时前
移动端架构体系(四):View层的组织与调用方案
flutter·ios·架构·系统架构·安卓
inxx21 小时前
iOS 26 模拟器启动卡死:Method Swizzling 在系统回调时触发 nil 崩溃
ios
Swift社区21 小时前
鸿蒙 vs iOS / Android:谁更适合 AI?
android·ios·harmonyos
亘元有量-流量变现21 小时前
ASO优化全流程实操指南:从基础到迭代,精准提升App曝光与转化
android·ios·harmonyos·aso优化·方糖试玩
zhangjikuan891 天前
iOS屏幕适配方案
ios
tangweiguo030519872 天前
SwiftUI布局完全指南:从入门到精通
ios·swift
T1an-12 天前
最右IOS岗一面
ios
用户79457223954132 天前
【RxSwift】Swift 版 ReactiveX,响应式编程优雅处理异步事件流
swift·rxswift
坏小虎2 天前
Expo 快速创建 Android/iOS 应用开发指南
android·ios·rn·expo
光影少年2 天前
Android和iOS原生开发的基础知识对RN开发的重要性,RN打包发布时原生端需要做哪些配置?
android·前端·react native·react.js·ios