如何从 swiftui 手势启动视图
How to launch a View from a swiftui gesture
ios13 中的手势似乎不允许使用 .sheet 来启动模态视图,也不允许使用 .alert。 Alerts 和 Sheets 似乎只适用于按钮、图像和其他对象,但不适用于手势。除了使用存在隐藏等问题的按钮之外,还有其他解决方法吗?
ZStack(alignment: .top) {
MapView(currentTab: self.$selection, mapViewModel: self.mapViewModel)
.edgesIgnoringSafeArea(.all)
.environment(\.colorScheme, .light)
.overlay(Rectangle()
.opacity(0.1)
//.background(Color.clear)
.background(Image("Cursor_Flecha_4.svg")
.resizable()
.aspectRatio(contentMode: .fit)
.scaledToFit()
//.frame(width: 32.0, height: 32.0))
.frame(width: geo.size.width, height: geo.size.height * 0.15))
.border(Color.red, width: 4)
.frame(width: geo.size.width, height: geo.size.height * 0.25)
.gesture(
DragGesture(minimumDistance: 50)
.onEnded { gesture in
if ((gesture.translation.width >= 50) && (abs(gesture.translation.height) <= 20)) {
print("swipe right detected")
// GetRouteName()
.sheet(isPresented: self.$showView) {
GetRouteName(onDismiss: {
self.showView = false
self.mapViewModel.saveRoute(coreDM: self.coreDM, routeName: self.routeName)
}, routeName: self.$routeName) //.offset(y: self.showView ? 0 : 1000)
}
} else {
您不能将 .sheet
放入 DragGesture().onEnded
闭包中。相反,用你的 sheet.
创建一个状态 属性 和 link
struct ContentView: View {
@State private var showSheet = false
var body: some View {
MapView(...)
.gesture(
DragGesture()
.onEnded { gesture in
if ((gesture.translation.width >= 50) && (abs(gesture.translation.height) <= 20)) {
print("swipe right detected")
self.showSheet = true
}
}
)
.sheet(isPresented: self.$showSheet) { ... }
}
ios13 中的手势似乎不允许使用 .sheet 来启动模态视图,也不允许使用 .alert。 Alerts 和 Sheets 似乎只适用于按钮、图像和其他对象,但不适用于手势。除了使用存在隐藏等问题的按钮之外,还有其他解决方法吗?
ZStack(alignment: .top) {
MapView(currentTab: self.$selection, mapViewModel: self.mapViewModel)
.edgesIgnoringSafeArea(.all)
.environment(\.colorScheme, .light)
.overlay(Rectangle()
.opacity(0.1)
//.background(Color.clear)
.background(Image("Cursor_Flecha_4.svg")
.resizable()
.aspectRatio(contentMode: .fit)
.scaledToFit()
//.frame(width: 32.0, height: 32.0))
.frame(width: geo.size.width, height: geo.size.height * 0.15))
.border(Color.red, width: 4)
.frame(width: geo.size.width, height: geo.size.height * 0.25)
.gesture(
DragGesture(minimumDistance: 50)
.onEnded { gesture in
if ((gesture.translation.width >= 50) && (abs(gesture.translation.height) <= 20)) {
print("swipe right detected")
// GetRouteName()
.sheet(isPresented: self.$showView) {
GetRouteName(onDismiss: {
self.showView = false
self.mapViewModel.saveRoute(coreDM: self.coreDM, routeName: self.routeName)
}, routeName: self.$routeName) //.offset(y: self.showView ? 0 : 1000)
}
} else {
您不能将 .sheet
放入 DragGesture().onEnded
闭包中。相反,用你的 sheet.
struct ContentView: View {
@State private var showSheet = false
var body: some View {
MapView(...)
.gesture(
DragGesture()
.onEnded { gesture in
if ((gesture.translation.width >= 50) && (abs(gesture.translation.height) <= 20)) {
print("swipe right detected")
self.showSheet = true
}
}
)
.sheet(isPresented: self.$showSheet) { ... }
}