我有一个 SwiftUI 应用程序,其中向用户呈现了一些内容,然后用户将使用Path
视图对其进行注释。
我遇到的问题是,当我为绘图视图使用清晰的背景或根本没有背景时,它下面的内容将根据需要显示,但绘图操作的手势更改不会注册。
但是,如果我为背景分配了不清晰的颜色,则手势会更改注册并出现绘图。
FWIW,我能够使用UIKit
基于接口的界面来实现所需的效果,现在只想用 SwiftUI 重新创建它。
下面的简化代码是一个完整的例子,展示了我的困境。这只是正在使用的代码的近似值,因此不完全是生产质量。
通过更改backgroundColor
为clear
或注释掉该.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)
}
}