使用返回视图的函数时,拖动手势不起作用

时间:2020-08-16 18:38:11

标签: ios swift swiftui

我有一个View,其中的元素具有拖动手势,效果很好。但是,我试图使用修饰符函数将整个内容放入ZStack中,并可选地在其之上显示其他内容。如果我使用additionalView修饰符,则拖动手势将停止工作。我什至尝试将其与EmptyView()配合使用,并且还尝试仅返回body中的additionalView,拖动手势无效。由于某些原因,translation变量未在DragGesture.updating中更新,但是value的值正确。也尝试使用@State 而不是@GestureState并手动进行更新,但这也不起作用。也许不使用用于呈现可选视图的函数,而是在视图的构造函数中使用可选的@ViewBuilder参数并将ZStack放在正文中即可,但我更喜欢这种方法。

struct DragTest: View {
    @GestureState private var translation: CGFloat = 0
    var body: some View {
        GeometryReader { geometry in
            HStack(spacing: 0) {
                Spacer()
                Text("some text")
                Spacer()
            }
            .frame(width: geometry.size.width, alignment: .leading)
            .offset(x: self.translation)
            .gesture(
                DragGesture().updating(self.$translation) { value, state, _ in
                    state = value.translation.width
                    print(value.translation.width)
                    print(self.translation)
                }
            )
        }
    }

    func additionalView<AdditionalView: View>(@ViewBuilder additionalView: @escaping () -> AdditionalView) -> some View {
        ZStack {
            self.body
            additionalView()
        }
    }
}

struct ContentView: View {
    var body: some View {
        DragTest()
            .additionalView {
                EmptyView()
        }
    }
}

0 个答案:

没有答案