In this tutorial I'm going to show how to use drag gesture swipe up-down menu with animations
ContentView.swift
//
// ContentView.swift
// swiftuidev
//
// Created by Cairocoders
//
import SwiftUI
struct ContentView: View {
@State var size : CGFloat = UIScreen.main.bounds.height - 140
var body: some View {
ZStack{
Text("Hello Cairocoders")
.fontWeight(.heavy)
.foregroundColor(Color.white)
swipe().cornerRadius(20).padding(15).offset(y: size)
.gesture(DragGesture()
.onChanged({ (value) in
if value.translation.height > 0{
self.size = value.translation.height
}
else{
let temp = UIScreen.main.bounds.height - 140
self.size = temp + value.translation.height
}
})
.onEnded({ (value) in
if value.translation.height > 0{
if value.translation.height > 200{
self.size = UIScreen.main.bounds.height - 140
}
else{
self.size = 15
}
}
else{
//since in negative lower value will be greater...
if value.translation.height < -200{
self.size = 15
}
else{
self.size = UIScreen.main.bounds.height - 140
}
}
})).animation(.spring())
// animation for drag
}
.background(Color.gray.edgesIgnoringSafeArea(.all))
}
}
struct swipe : View {
let countryList = Locale.isoRegionCodes.compactMap { Locale.current.localizedString(forRegionCode: $0) }
var body : some View{
VStack{
VStack{
Text("Swipe up to See More").fontWeight(.heavy).padding([.top,.bottom],15)
}
// your custom view here....
HStack {
NavigationView {
List {
ForEach(countryList, id: \.self) { country in
Text(country)
}
}
.navigationTitle("Country")
}
}
}.background(Color.white)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
