swiftui_SideMenu
SwiftUI SideMenu
SwiftUI로 사이드메뉴를 구현한 간단한 예제이다.
기본적으로 SideMenuView.swift와 그 안에 표시해줄 MenuButtonView.swift 두 파일이 있으며, SideMenuView는 ZStack으로 메인 화면에 보여주게 된다.
MainView.swift
struct MainView: View {
// 사이드 메뉴를 열고 닫음을 저장할 변수
@State var sideMenuBarToggle: Bool = false
var body: some View {
ZStack{
// MainView's View...
// 사이드 메뉴 선언, sideMenuBarToggle 변수 Binding.
SideMenuView(sideMenuBarToggle: $sideMenuBarToggle)
}
// 화면 끝까지 채우기 위해
.ignoresSafeArea()
}
}
SideMenuView.swift
struct SideMenuView: View {
// MainView에서의 Bool변수 바인딩.
@Binding var sideMenuBarToggle: Bool
@State var width = UIScreen.main.bounds.width
@State var edges = UIApplication.shared.windows.first?.safeAreaInsets
@State var selectedIndex = ""
var body: some View {
// Side Menu
HStack(spacing: 0){
Spacer(minLength: 0)
VStack{
HStack{
Spacer(minLength: 0)
Button(action: {
withAnimation(.spring()){
// 애니메이션을 포함해 버튼 토글
sideMenuBarToggle.toggle()
}
}, label: {
Image(systemName: "xmark")
.font(.system(size: 22, weight: .bold))
.foregroundColor(.white)
})
}
.padding()
.padding(.top, edges?.top)
HStack(spacing: 15){
VStack(alignment: .leading, content: {
Text("Placeholder")
.font(.title)
.fontWeight(.semibold)
Text("wnehdtjr5@gmail.com")
.fontWeight(.semibold)
})
.foregroundColor(.white)
Spacer(minLength: 0)
}
.padding(.horizontal)
// Menu Buttons ...
VStack (alignment: .leading){
MenuButtonView(image: "gear", title: "asdfasdfa", selected: $selectedIndex, show: $sideMenuBarToggle)
MenuButtonView(image: "gear", title: "asdfasdfa", selected: $selectedIndex, show: $sideMenuBarToggle)
MenuButtonView(image: "gear", title: "asdfasdfa", selected: $selectedIndex, show: $sideMenuBarToggle)
MenuButtonView(image: "gear", title: "asdfasdfa", selected: $selectedIndex, show: $sideMenuBarToggle)
MenuButtonView(image: "gear", title: "asdfasdfa", selected: $selectedIndex, show: $sideMenuBarToggle)
}
.padding(.top)
Spacer(minLength: 0)
}
.frame(width: width - 100)
.background(Color.gray)
// 토글 변수로 검사해 x좌표 지정
.offset(x: sideMenuBarToggle ? 0 : width - 100)
}
// 토글 변수로 검사해 뒷 배경 색깔 지정
.background(Color.black.opacity(sideMenuBarToggle ? 0.3 : 0))
}
}
MenuButtonView.swift
struct MenuButtonView: View {
var image : String
var title : String
var body: some View{
Button(action: {
// Some Changing Views..
}, label: {
HStack (spacing: 15){
Image(systemName: image)
.font(.system(size: 22))
Text(title)
.font(.title2)
.fontWeight(.semibold)
}
.padding(.vertical)
})
.padding(.top, 5)
.foregroundColor(.white)
}
}
주석을 위주로 보면 어렵지 않은 코드이다.
하지만 거의 모든 어플리케이션에 필수적으로 들어가는 UI로 자주 쓸 것 같아 정리해봤다.

