I created a view similar to the code I attached. It uses offset and a boolean to toggle the view up and down with either a button or a tap on outside space. HOWEVER, I been trying to also dismiss by dragging down. I tried many ways but apparently don't know enough about gestures to figure it out. I tried copying code from others but it hasn't worked out. I'd like it to behave the way Instagram's hamburger menu works in the users view. I attached some gifs of how mine works and how instagrams works.
enter image description here enter image description here
struct View1: View {
@EnvironmentObject var viewModel : ViewModel
var body: some View {
ZStack {
VStack {
Text("Press Me")
Spacer()
}.padding(.top,50)
.onTapGesture {
withAnimation(.default) {
viewModel.offsetView.toggle()
}
}
} //Z
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .center)
.overlay(
View2()
)
}
}
struct View2: View {
@EnvironmentObject var viewModel : ViewModel
let array = ["ITEM 1", "ITEM 2", "ITEM 3", "ITEM 4", "ITEM 5", "ITEM 6"]
let screenH = UIScreen.main.bounds.height
let screenW = UIScreen.main.bounds.width
var body: some View {
VStack {
ForEach (self.array, id: \.self) { array in
Text(array)
.padding(.vertical)
Divider()
}
Spacer()
} //V
.background(.bar)
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .leading)
.offset(y: viewModel.offsetView ? screenH/2.2:screenH)
.environmentObject(ViewModel())
}
}
struct View1_Previews: PreviewProvider {
static var previews: some View {
View1()
.environmentObject(ViewModel())
}
}
class ViewModel: ObservableObject {
@Published var offsetView = false
}