这是一个简单的例子,展示了一种拖动手指的可能方式
2 个视图/图像,并在进入不同的视图/图像时突出显示它们。
你将不得不做更多的工作。希望对您有所帮助。
struct ContentView: View {
class ImgObj: ObservableObject {
@Published var img1Rec: CGRect = CGRect.zero
@Published var img2Rec: CGRect = CGRect.zero
@Published var img1Color: Color = .black
@Published var img2Color: Color = .black
}
@ObservedObject var imgObj = ImgObj()
@GestureState var dragVar = CGSize.zero
var body: some View {
let dragger = DragGesture(minimumDistance: 0.0, coordinateSpace: .global)
.updating($dragVar, body: { (value, _, _) in
imgObj.img1Color = imgObj.img1Rec.contains(value.location) ? .red : .black
imgObj.img2Color = imgObj.img2Rec.contains(value.location) ? .red : .black
})
GeometryReader { geometry in
VStack {
Image(systemName: "clock").resizable().frame(width: 222, height: 222)
.foregroundColor(imgObj.img1Color)
.gesture(dragger)
.onAppear {
// use geometry.frame(in: .global) somehow to get the CGRect
imgObj.img1Rec = CGRect(x: 0, y: 0, width: 222, height: 222)
}
Image(systemName: "folder").resizable().frame(width: 222, height: 222)
.foregroundColor(imgObj.img2Color)
.gesture(dragger)
.onAppear {
// use geometry.frame(in: .global) somehow to get the CGRect
imgObj.img2Rec = CGRect(x: 0, y: 222, width: 222, height: 222)
}
}
}
}
}
编辑注释:
代替:
.onAppear {
// use geometry.frame(in: .global) somehow to get the CGRect
imgObj.img1Rec = CGRect(x: 0, y: 222, width: 222, height: 222)
}
你可以使用:
.background(
GeometryReader { proxy in
Color.clear
.onAppear {
imgObj.img1Rec = proxy.frame(in: .global)
}
})