Popups and alerts with SwiftUI
PopupView
Implementation of view popups written with SwiftUI
| Bottom | Top | Center |
|---|---|---|
Requirements
| Platform | Minimum Swift Version | Installation |
|---|---|---|
| iOS 15+ | 5.7 | Swift Package Manager |
Installation
The Swift package manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.
Once you have your Swift package set up, adding PopupView as a dependency is as easy as adding it to the dependencies value of your Package.swift.
dependencies: [
.package(url: "https://github.com/Mijick/PopupView.git", branch(“main”))
]
Usage
Setup project
Inside @main structure body call the implementPopupView method
var body: some Scene {
WindowGroup(content: ContentView().implementPopupView)
}
Animation protocols
The library provides an ability to use custom views. In order to present a view on top of other views, it is necessary to inherit from one of the protocols during popup creation:
TopPopup– presents popup view from the topCentrePopup– presents popup view from the centerBottomPopup– presents popup view from the bottom
Common Setup
Inheritance from one of the popup protocols requires the implementation of the following requirements:
- Set the
idparameter to control the uniqueness of the views being presented
let id: String { "some_id" }
- Implement
createContentmethod. It’s used instead of thebodyproperty, and declares the design of the popup view
func createContent() -> some View {
VStack(alignment: .leading, spacing: 0) {
Text("First")
Spacer.height(12)
Text("Another element")
}
.padding(.top, 36)
}
- Implement
configurePopup(popup: Config) -> Configmethod to setup UI of presented view Each protocol has its own set of configuration type
An example of implementing BottomPopup protocol configurations setups
func configurePopup(popup: BottomPopupConfig) -> BottomPopupConfig {
popup
.contentIgnoresSafeArea(true)
.activePopupCornerRadius(0)
.stackedPopupsCornerRadius(0)
}
Available Configurations
| TopPopup | CentrePopup | BottomPopup | |
|---|---|---|---|
| backgroundColour | ✅ | ✅ | ✅ |
| contentIgnoresSafeArea | ✅ | ❌ | ✅ |
| horizontalPadding | ✅ | ✅ | ✅ |
| bottomPadding | ❌ | ❌ | ✅ |
| topPadding | ✅ | ❌ | ❌ |
| stackedPopupsOffset | ✅ | ❌ | ✅ |
| stackedPopupsScale | ✅ | ❌ | ✅ |
| stackedElementsLimit | ✅ | ❌ | ✅ |
| cornerRadius | ❌ | ✅ | ❌ |
| activePopupCornerRadius | ✅ | ❌ | ✅ |
| stackedPopupsCornerRadius | ✅ | ❌ | ✅ |
| activePopupCornerRadius | ✅ | ❌ | ✅ |
| dragGestureProgressToClose | ✅ | ❌ | ✅ |
| dragGestureAnimation | ✅ | ❌ | ✅ |
| tapOutsideToDismiss | ❌ | ✅ | ❌ |
| transitionAnimation | ✅ | ✅ | ✅ |
TopPopup
| Safe area | Ignore safe area |
|---|---|
CentrePopup
BottomPopup
| Safe Area | Ignore Safe Area |
|---|---|
Popup Stack
The PopupView allows you to stack views and present several popups on the screen at the same time. The library automatically manages the display of multiple pop-up windows depending on the type of presentation.
| Bottom stack | Top stack | Different view heights | Bottom stack |
|---|---|---|---|
Popup presentation
To present a view, it is enough to initialize it and call the method present
SomeView().present()
Popup dismiss
Call the method dismiss inside the popup view to dismiss it
It’s also available to dismiss any view with methods inside the PopupManager class:
dismissLast– Dismisses the last presented popup view
PopupManager.dismissLast()
dismiss(id:)– Dismisses the presented popup view with concrate id
PopupManager.dismiss(id: "some_id")
dismissAll– Dismisses all presented popup views
PopupManager.dismissAll()
Project example
PopupView-Example – example of usage PopupView library