diff --git a/README.md b/README.md index d0a4332d..ab267709 100644 --- a/README.md +++ b/README.md @@ -168,6 +168,42 @@ leftMenuNavigationController.statusBarEndAlpha = 0 rightMenuNavigationController.settings = leftMenuNavigationController.settings ``` That's it. + +### SwiftUI Implementation + +For SwiftUI projects, you can use the provided View modifier: + +```swift +import SwiftUI +import SideMenu + +struct ContentView: View { + @State private var showMenu = false + + var body: some View { + VStack { + Button("Open Menu") { + showMenu = true + } + } + .sideMenu(isPresented: $showMenu, menu: { + AnyView(MenuView()) + }) + } +} + +struct MenuView: View { + var body: some View { + VStack { + Text("Side Menu") + .font(.title) + // Add your menu items here + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color.white) + } +} +``` ### Customization #### SideMenuManager `SideMenuManager` supports the following: diff --git a/SideMenu/SideMenuSwiftUI.swift b/SideMenu/SideMenuSwiftUI.swift new file mode 100644 index 00000000..2d4b7bb9 --- /dev/null +++ b/SideMenu/SideMenuSwiftUI.swift @@ -0,0 +1,25 @@ +import SwiftUI + +@available(iOS 13.0, *) +public extension View { + func sideMenu(isPresented: Binding, menu: @escaping () -> AnyView) -> some View { + self.modifier(SideMenuModifier(isPresented: isPresented, menu: menu)) + } +} + +struct SideMenuModifier: ViewModifier { + @Binding var isPresented: Bool + let menu: () -> AnyView + + func body(content: Content) -> some View { + ZStack { + content + if isPresented { + menu() + Color.black.opacity(0.4) + .ignoresSafeArea() + .onTapGesture { isPresented = false } + } + } + } +}