SwiftUI - 상하 좌우에서 나오는 하프 모달 구현
비망록으로 남깁니다.
사용법
SideMenu를 호출하여 사용
기능 개요
・표시 애니메이션
・하프 모달 표시중은 뒤의 View의 색의 톤을 떨어뜨린다
・뒤의 View 탭시는 닫는다
구현
//ContentView.swift
import SwiftUI
struct ContentView: View {
@State private var isOpen:Bool = false
var body: some View {
ZStack() {
Button(action: {
isOpen.toggle()
}) {
Text("OpenSideMenu")
.frame(width: 200, height: 50, alignment: .center)
.background(Color.black)
.foregroundColor(.white)
.cornerRadius(5.0)
}
SideMenu(view: MenuView(), width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height/2, menuType: .fromTop,isOpen: $isOpen)
}.background(Color.green)
.ignoresSafeArea(.all)
}
}
//MenuView.swift
import SwiftUI
struct MenuView: View {
var body: some View {
VStack() {
Text("ハーフモーダル")
.font(.title)
.bold()
Image("myImg")
.resizable()
.clipShape(Circle())
.overlay(
Circle().stroke(Color.white, lineWidth: 2))
.frame(width: 50, height: 50, alignment: .leading)
}
}
}
//SideMenu.swift
import SwiftUI
//サイドメニュー
struct SideMenu<Content: View>: View {
enum menutype {
case fromLeft
case fromRight
case fromTop
case fromBottom
}
let view: Content //表示させるViewを指定
let width: CGFloat //メニューの幅を指定
let height:CGFloat //メニューの高さを指定
let menuType: menutype //type指定(.fromLeft, .fromRight, .fromTop)
@Binding var isOpen: Bool //BtnのBoolを引数とする
var body: some View {
ZStack {
GeometryReader { _ in
EmptyView()
}
.background(Color.gray.opacity(0.3))
.opacity(self.isOpen ? 1.0 : 0.0)
.animation(Animation.easeIn.delay(0.25))
.onTapGesture {
self.isOpen.toggle()
}
let displyView = view
.frame(width: self.width, height: self.height)
.background(Color.white)
.animation(.default)
switch self.menuType {
case .fromLeft:
HStack() {
displyView
.offset(x: self.isOpen ? 0 : -self.width)
Spacer()
}
case .fromRight:
HStack() {
Spacer()
displyView
.offset(x: self.isOpen ? 0 : +self.width)
}
case .fromTop:
VStack() {
displyView
.offset(y: self.isOpen ? 0 : -self.height)
Spacer()
}
case .fromBottom:
VStack() {
Spacer()
displyView
.offset(y: self.isOpen ? 0 : +self.height)
}
}
}.ignoresSafeArea(.all)
}
}
Reference
이 문제에 관하여(SwiftUI - 상하 좌우에서 나오는 하프 모달 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Goru_komaki/items/77c7989945d629d47c8b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)