SwiftUIKit
提供了一系列常用的控件,用于 SwiftUI
。
如果您觉得 SwiftUIKit
有用,并希望帮助支持其持续开发和维护,请考虑进行小额捐款,尤其是在商业产品中使用时。
正是因为有像您这样的贡献者的支持,我才能继续构建、发布和维护高质量、文档完善的 Swift Package(如 SwiftUIKit
),而且是免费的。
Swift Package Manager (Xcode 11 及以上)
https://github.com/Appracatappra/SwiftUIKit.git
粘贴到对话框中。为什么不使用 CocoaPods、Carthage 等?
支持多个依赖管理器会使维护一个库的复杂度呈指数级增长,并且耗费更多时间。
由于 Swift Package Manager 已集成到 Xcode 11(及更高版本)中,因此它是继续支持的最简单选择。
SwiftUIKit
提供了一种简单的方法,可以在您的 SwiftUI View
中显示警报,并提供几个有用的新控件,包括
CircleText
控件将在 SwiftUI View
中围绕一个圆显示文本。ContentButton
是一种特殊的 SwiftUI button
类型,它在 tvOS 设备上的工作方式和布局与在移动设备上相同。IconButton
是一个 SwiftUI
控件,显示为一个带有边框和图标的圆角按钮。IconButton
将与基于触摸和基于焦点的 UI 配合使用。IconDescriptionButton
是一个 SwiftUI
控件,显示为一个带有边框和图标以及描述性文本块的圆角按钮。 IconDescriptionButton
是一个很棒的用户偏好设置控件,并且可以与基于触摸和基于焦点的 UI 配合使用。OnOffToggleButton
是一个 SwiftUI
控件,显示为一个带有边框和图标的圆角按钮。 单击 OnOffToggleButton
会在 on 和 off 状态之间切换,并且可以与基于触摸和基于焦点的 UI 配合使用。ScaledImageButton
是一个 SwiftUI
控件,将给定的图像显示为按钮。 ScaledImageButton
将与基于触摸和基于焦点的 UI 配合使用。ScaledImageView
是一个 SwiftUI
控件,用于在 SwiftUI View
中显示图像,并按给定的比例缩放。 图像直接从磁盘存储缩放,因此在设备中占用的实际内存更少。SelectIntOptionsButton
是一个 SwiftUI
控件,显示为一个带有边框、图标和描述性文本块的圆角按钮。 单击后,SelectIntOptionsButton
将循环显示提供的选项列表。 SelectIntOptionsButton
将与基于触摸和基于焦点的 UI 配合使用,并且是一个很棒的用户偏好设置控件。WordArtButton
是一个 SwiftUI
控件,显示为可交互的艺术字。 WordArtButton
将与基于触摸和基于焦点的 UI 配合使用。WordArtView
以给定的字体、大小和旋转角度以及定义的渐变显示文本。ZoomView
用于给定 SwiftUI 内容的可缩放、可滚动容器。 它提供了放大和缩小以及返回到默认缩放级别的按钮。SwiftUIKit
中嵌入了两个默认声音
这两种声音均来自 Freeound.org,遵循 Creative Commons 0 许可。
SwiftUIKit
提供了一些辅助实用程序,使您可以轻松访问存储在 Swift Package 中的资源(例如上面的声音)。
例如,以下代码将返回 diamond-click.mp3
文件的路径
let path = SwiftUIKit.pathTo(resource:"diamond-click.mp3")
SwiftUIKit
中定义的几个控件都有一组静态属性来控制创建的所有控件实例,而无需指定这些属性。
例如,IconButton
定义了
/// The default background color for the `IconButton`.
static public var defaultBackgroundColor:Color = .gray
/// The default sound source for the `IconButton`.
static public var defaultSoundSource:SwiftUIKit.Source = .packageBundle
/// The default button clicked sound `IconButton`.
static public var defaultButtonSound:String = "mouse-click.mp3"
/// The default focused sound for the `IconButton`.
static public var defaultButtonFocusSound:String = "diamond-click.mp3"
如果您想要以通用方式设置整个 App 中使用的所有 IconButton
实例的样式,只需调整 IconButton
的 defaultBackgroundColor
IconButton.defaultBackgroundColor = .blue
现在,所有新创建的 IconButtons
都将具有蓝色背景。
要使样式更改生效,您需要在绘制任何 Views
之前进行更改。 您可以在主应用程序上使用以下代码
import SwiftUI
import SwiftletUtilities
import LogManager
import SwiftUIKit
@main
struct PackageTesterApp: App {
@UIApplicationDelegateAdaptor private var appDelegate: AppDelegate
@Environment(\.scenePhase) private var scenePhase
@Environment(\.colorScheme) var colorScheme
var body: some Scene {
WindowGroup {
ContentView()
}
.onChange(of: scenePhase) { oldScenePhase, newScenePhase in
switch newScenePhase {
case .active:
Debug.info(subsystem: "PackageTesterApp", category: "Scene Phase", "App is active")
case .inactive:
Debug.info(subsystem: "PackageTesterApp", category: "Scene Phase", "App is inactive")
case .background:
Debug.info(subsystem: "PackageTesterApp", category: "Scene Phase", "App is in background")
@unknown default:
Debug.notice(subsystem: "PackageTesterApp", category: "Scene Phase", "App has entered an unexpected scene: \(oldScenePhase), \(newScenePhase)")
}
}
}
}
/// Class the handle the event that would typically be handled by the Application Delegate so they can be handled in SwiftUI.
class AppDelegate: NSObject, UIApplicationDelegate {
/// Handles the app finishing launching
/// - Parameter application: The app that has started.
func applicationDidFinishLaunching(_ application: UIApplication) {
// Register to receive remote notifications
UIApplication.shared.registerForRemoteNotifications()
}
/// Handle the application getting ready to launch
/// - Parameters:
/// - application: The application that is going to launch.
/// - launchOptions: Any options being passed to the application at launch time.
/// - Returns: Returns `True` if the application can launch.
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
// Set any `SwiftUIKit` global style defaults here before any `Views` are drawn.
// Set style defaults
IconButton.defaultBackgroundColor = .blue
return true
}
/// Handles the app receiving a remote notification
/// - Parameters:
/// - application: The app receiving the notifications.
/// - userInfo: The info that has been sent to the App.
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
}
}
有了这段代码,就可以在 func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
中进行任何样式更改,它们将应用于之后构建的所有视图。
此 Package 包含其所有功能的完整 DocC 文档。