From 934ec888bca7302f8e2079ccd5377295e22c3224 Mon Sep 17 00:00:00 2001 From: Manjiro Sano Date: Sat, 22 Nov 2025 10:07:36 +0530 Subject: [PATCH 1/2] feat: Add SwiftUI modifier for SideMenu integration Adds SwiftUI compatibility layer with View extension and ViewModifier. This implementation provides a simple way to integrate SideMenu functionality into SwiftUI apps using a familiar modifier pattern. Related to issue #637 --- SideMenu/SideMenuSwiftUI.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 SideMenu/SideMenuSwiftUI.swift 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 } + } + } + } +} From 65983b9a055b8a98004d86a2475abba8dbe7dc3b Mon Sep 17 00:00:00 2001 From: Manjiro Sano Date: Sat, 22 Nov 2025 10:11:09 +0530 Subject: [PATCH 2/2] docs: Add SwiftUI usage examples to README Documents how to use the new SwiftUI View modifier for integrating SideMenu in SwiftUI applications. Includes complete code example with ContentView and MenuView implementation. --- README.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) 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: