Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在swiftui中使用self.offset拖动侧菜单?_Swiftui - Fatal编程技术网

如何在swiftui中使用self.offset拖动侧菜单?

如何在swiftui中使用self.offset拖动侧菜单?,swiftui,Swiftui,我的侧菜单有以下代码,但我无法设置self.offset(x:,y:),因为它表示结果未使用?我如何才能使这项工作,因为我希望菜单可以拖动到左侧 @Binding var showMenu: Bool var body: some View { HStack { GeometryReader { geometry in MenuView() .frame(width: 240, a

我的侧菜单有以下代码,但我无法设置self.offset(x:,y:),因为它表示结果未使用?我如何才能使这项工作,因为我希望菜单可以拖动到左侧

    @Binding var showMenu: Bool

    var body: some View {
        HStack {
            GeometryReader { geometry in

            MenuView()
                .frame(width: 240, alignment: .leading)
                .background(Color.white)
                .offset(x: self.showMenu ? 0 : -geometry.size.width)
                .animation(.spring())
                .transition(.move(edge: .leading))
                .zIndex(4)
                .gesture(DragGesture()
                    .onChanged { val in
                        self.offset(x: val.translation.width)
                    }
                    .onEnded { val in
                        self.offset(x: .zero)
                    }
                )
            }
        }
    }

因为代码是不可测试的,所以只需要想法-不好测试。您不能使用视图结构的
self
,而是更改一些状态,并在相应的修饰符中使用该状态值,如下所示

@Binding var showMenu: Bool

@State private var xOffset: CGFloat = .zero

var body: some View {
    HStack {
        GeometryReader { geometry in

        MenuView()
            .frame(width: 240, alignment: .leading)
            .background(Color.white)
            .offset(x: self.showMenu ? xOffset : -geometry.size.width)
            .animation(.spring())
            .transition(.move(edge: .leading))
            .zIndex(4)
            .gesture(DragGesture()
                .onChanged { val in
                    self.xOffset = val.translation.width
                }
                .onEnded { val in
                    self.xOffset = .zero
                }
            )
        }
    }
}

因为代码是不可测试的,所以只需要想法-不好测试。您不能使用视图结构的
self
,而是更改一些状态,并在相应的修饰符中使用该状态值,如下所示

@Binding var showMenu: Bool

@State private var xOffset: CGFloat = .zero

var body: some View {
    HStack {
        GeometryReader { geometry in

        MenuView()
            .frame(width: 240, alignment: .leading)
            .background(Color.white)
            .offset(x: self.showMenu ? xOffset : -geometry.size.width)
            .animation(.spring())
            .transition(.move(edge: .leading))
            .zIndex(4)
            .gesture(DragGesture()
                .onChanged { val in
                    self.xOffset = val.translation.width
                }
                .onEnded { val in
                    self.xOffset = .zero
                }
            )
        }
    }
}