NSIcon 为 SwiftUI 编程提供了一个易于使用的 Mac 应用程序图标视图,通过利用系统原生资源中的高清资源,减少了手动存储额外资源的需求。
使用 NSIcon
就像 SwiftUI 中内置的 Image
视图一样简单。您可以访问 Mac 上安装的几乎所有应用程序图标。
// Use `init()` if you want to access the icon of your app itself.
NSIcon()
// Get an app icon view by name.
NSIcon("Safari")
// You can also access app icon by its bundle identifier.
NSIcon(bundleIdentifier: "com.apple.safari")
如果无法提供相应的图标,NSIcon 将显示 macOS 默认附带的 GenericApplicationIcon。
您可以使用 iconPlaceholderStyle
修饰符来获得占位符的不同外观。
NSIcon("unknown")
.iconPlaceholderStyle(.classic)
考虑到这些平台上的应用程序沙箱环境,无法访问其他应用程序的图标文件资源,UIIcon
仅提供访问应用程序自身图标的能力。
与 NSIcon
的行为不同,UIIcon
默认情况下会为图标添加遮罩。使用参数 addMask: Bool
来控制。
在不同的平台上,遮罩的外观是不同的。
平台 | iOS | iPadOS | Mac Catalyst | watchOS | visionOS |
---|---|---|---|---|---|
遮罩 | AppIconMask | AppIconMask | MacAppIconMask | 圆形 | 圆形 |
UIIcon()
UIIcon(addMask: false)
在 visionOS 中,应用程序图标由三个不同的图层组成。默认情况下,使用 init()
渲染合并版本。您也可以使用 init(_ layer: AppIconlayer)
或 init(_ layers: [AppIconlayer])
来选择要显示的图标部分。
UIIcon(.back)
UIIcon([.middle, .front])
注意:
UIIcon
不支持iconPlaceholderStyle
修饰符。
NSAsyncIcon
的行为与 NSIcon
类似,它通过访问 iTunes Search API 从 App Store 获取应用程序图标。
NSAsyncIcon("Pages")
NSAsyncIcon(bundleIdentifier: "com.apple.iwork.pages")
当使用 appName
作为初始化参数时,您可以设置您对 iOS、macOS、watchOS 或 visionOS 应用程序的偏好,以决定您收到的结果。默认值为 .macOS
。
NSAsyncIcon("Pages", for: .iOS)
iOS 应用程序图标和一些 macOS 应用程序图标呈现为不透明的正方形。因此,请考虑是否为其添加圆角矩形遮罩。默认值为 false
。
注意:
NSAsyncIcon
将检查此图标是否包含透明像素。如果是,则不会将遮罩添加到视图。
NSAsyncIcon("Pages", for: .iOS, addMask: true)
注意: 按照 Apple 的 人机界面指南,iOS 应用程序图标的外观比 Mac 应用程序图标略大。此框架无意破坏这些规则。请根据您的具体用例酌情处理。
有时,您可能想要访问某些仅在特定国家或地区的 App Store 中提供的应用程序。您可以通过输入国家/地区代码轻松实现此目的。
NSAsyncIcon("原神", country: "CN")
UIAsyncIcon
的工作方式几乎与 NSAsyncIcon
相同,请查看以下差异
for platform: AppPlatform
参数默认为 .iOS
placeholderStyle
修饰符UIAsyncIcon
使用 ProgressView()
作为默认占位符,要创建自定义占位符,只需将自定义视图添加到 placeholder
闭包即可。
UIAsyncIcon("Pages") { CustomPlaceholder() }
NSIcon 可通过 Swift Package Manager 安装。
dependencies: [
.package(url: "https://github.com/Stv-X/NSIcon.git", branch: "main")
]