william-weng/wwhudui
✨ [功能特色](https://peterpanswift.github.io/iphone-bezels/)
- 以
@Observable與@MainActor管理 HUD 狀態,適合直接驅動 SwiftUI 畫面更新。 - 使用
withAnimation與.transition(.opacity)實作淡入淡出效果,避免 HUD 突然出現或瞬間消失。 - 支援最短顯示時間
minimumVisibleDuration,避免 loading 太快時畫面只閃一下。 - 透過
Task管理延遲隱藏流程,連續呼叫display()/dismiss()時可先取消上一個隱藏任務,避免狀態互相干擾。 - 以
ViewModifier封裝,可用.loadingOverlay(hud:)很自然地套用到任意 SwiftUI View 上。
📦 安裝方式
Swift Package Manager
dependencies: [
.package(url: "https://github.com/William-Weng/WWHUDUI.git", .upToNextMajor(from: "1.1.1"))
]🧩 可用API
| 方法 | 說明 | |---|---| | display(_:duration:) | 顯示 HUD,並以指定動畫時間淡入。 | | dismiss(minimumVisibleDuration:duration:) | 關閉 HUD,並保證至少顯示指定秒數後才淡出。 |
🧩 可用 Modifier
| 方法 | 說明 | |---|---| | loadingOverlay(:background:) | 在畫面上顯示 loading overlay。 | | toastOverlay(:background:) | 在畫面下方顯示 toast overlay。 |
🚀 範例畫面結構
struct ContentView: View {
@State private var hud = WWHUDUI()
var body: some View {
VStack(spacing: 20) {
Button("開始載入") {
hud.display("資料載入中...")
Task {
try? await Task.sleep(for: .seconds(1.2))
hud.dismiss(minimumVisibleDuration: 0.3)
}
}
}
.loadingOverlay(hud)
}
}Package Metadata
Repository: william-weng/wwhudui
Default branch: main
README: README.md