Easy to pop up any view written with SwiftUI!
SwiftUI 实现的弹窗控件,简单易用!《中文文档》
SwiftUI で作られた PopupView は、簡単で使いやすいです!『日本語のREADME』
dependencies: [
.package(url: "https://github.com/pikacode/PopupUI.git")
]
pod 'PopupUI'
import PopupUI
Add .popupUI()
after a view to pop up within it's scope:
var body: some View {
VStack {
...
}
.popupUI() // <-- Add to the view
}
Or add to the root view, only once to pop up throughout the entire application:
@main
struct PopupUI_demoApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.popupUI() // <-- Add to the root view
}
}
}
PopupUI
.show(Text("Hello, PopupUI!"))
PopupUI
.hide() // <-- Hide the last popup
Customize various parameters:
PopupUI
.show(YourCustomView()) // <-- The view to be shown
.from(.bottom) // <-- The direction from which the view is shown
.stay(2) // <-- The duration of the view staying
.to(.center, .easeOut(duration: 0.3)) // <-- The direction to which the view is hidden and the animation
.background(Color.black.opacity(0.3)) // <-- The background view
.padding(24) // <-- The padding of the view
.isSafeArea(true) // <-- Whether to avoid the safe area
.id("Unique Popup ID") // <-- The unique identifier, when not passed, the same id is used by default, so only one popup can be displayed at a time, you can display multiple popups at the same time by setting different ids
.isAvoidKeyboard(true) // <-- Whether to avoid the keyboard
.isOpaque(true) // <-- Whether to prevent the user from interacting with the background view
.dismissWhenTapBackground(true) // <-- Whether to hide when the background view is tapped
.dismissCallback { id in // <-- The callback when the view is hidden
print("Popup dismissed: \(id)")
}
Or display a view and customize the parameters through the closure:
PopupUI
.show {
VStack {
...
}
} config: { config in
config.from = ...
}
PopupUI
.hide("Unique Popup ID") // <-- Hide the specified popup
Customize the default parameters through PopupConfiguration.default
to simplify the popup code:
let configuration = PopupConfiguration()
configuration.stay = 2
configuration.to = .center
...
PopupConfiguration.default = configuration
Or:
PopupConfiguration
.default
.stay(2)
.to(.center)
...