如何从swiftui手势启动View

时间:2020-06-29 16:14:22

标签: swiftui gesture

ios 13中的手势似乎不允许使用.sheet启动模式视图,也不允许使用.alert。警报和表格似乎仅适用于按钮,图像和其他对象,而不适用于手势。除了使用具有隐藏之类的问题的按钮以外,其他任何解决方法都无法解决。

                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 {
       

1 个答案:

答案 0 :(得分:0)

您不能将.sheet放在DragGesture().onEnded闭包中。而是创建一个state属性,并将其与工作表链接。

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) { ... }
   }