0

我有一个 SwiftUI 应用程序,其中向用户呈现了一些内容,然后用户将使用Path视图对其进行注释。

我遇到的问题是,当我为绘图视图使用清晰的背景或根本没有背景时,它下面的内容将根据需要显示,但绘图操作的手势更改不会注册。

但是,如果我为背景分配了不清晰的颜色,则手势会更改注册并出现绘图。

FWIW,我能够使用UIKit基于接口的界面来实现所需的效果,现在只想用 SwiftUI 重新创建它。

下面的简化代码是一个完整的例子,展示了我的困境。这只是正在使用的代码的近似值,因此不完全是生产质量。

通过更改backgroundColorclear或注释掉该.background(self.backgroundColor)行,BackgroundView将出现,但onChanged不会被调用,因此不会出现墨水。

如果我按原样运行,则会出现墨水,但我看不到BackgroundView.

import SwiftUI

struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            ZStack {
                DrawingView(backgroundColor: .white,
                            geometry: geometry)
                    .zIndex(1)

                BackgroundView()
            }
        }
    }
}

struct DrawingView: View {
    let backgroundColor: Color
    let geometry: GeometryProxy
    
    @State private var points = [CGPoint]()
    
    var body: some View {
        Path { path in
            guard !points.isEmpty else  { return }
            
            for index in 0..<points.count - 1 {
                path.move(to: points[index])
                path.addLine(to: points[index + 1])
            }
        }
        .stroke(Color.red, lineWidth: 3.0)
        .background(self.backgroundColor)
        .gesture(DragGesture(minimumDistance: 0.1)
        .onChanged({ changeValue in
            print("onChanged called")
            self.points.append(changeValue.location)
        }))
    }
}

// Just a simple View to fill the background
struct BackgroundView: View {
    var body: some View {
        Color.black
            .edgesIgnoringSafeArea(.all)
    }
}
4

1 回答 1

1

而不是后台使用 .contentShape 作为

.stroke(Color.red, lineWidth: 3.0)
.contentShape(Rectangle())                    // << here !!
.gesture(DragGesture(minimumDistance: 0.1)
.onChanged({ changeValue in
于 2020-06-29T14:25:12.187 回答