如何使用 SwiftUI 将图像拖到图像后面
How to drag an image behind an image using SwiftUI
希望你们中的任何人能帮助我并给我建议。
我的任务是用 SwiftUI 制作一个照片编辑应用程序。
在应用程序中有一个功能可以从人的照片中删除背景(因此只有人的对象),然后我创建了一个新的 UIImage 作为图层,用可以移动的图像替换背景(在照片后面)背景已被移除),因此它位于当我尝试拖动新背景但我不能时,因为从背景中移除的相框挡住了新的 UIImage 背景。
这是我编写的代码。
struct MaskImage: View {
@State var currentPositions = CGPoint.init(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/4)
@State var currentPosition = CGPoint.init(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/4)
@GestureState private var isDragging = false
var body: some View {
GeometryReader { geo in
HStack {
VStack {
Spacer()
ZStack {
Image("EFFECT-1") // DRAGGABLE PHOTO BACKGROUND
.resizable()
.frame(width: abs(geo.size.width-32), height: 375, alignment: .center)
.position(currentPosition)
.gesture(
DragGesture()
.onChanged { value in
self.currentPosition = value.location
}
.updating($isDragging) { (value, state, transaction) in // 1, 2
state = true
self.currentPosition = value.location
}
)
Image("SEGMENTED_IMAGE_REMOVE_BACKGROUND") // The image that will be the front
.resizable()
.frame(width: abs(geo.size.width - 32), height: abs(round((geo.size.width / 2) * 2.438)), alignment: .center)
}
Spacer()
}
}
.background(Color.red)
}
}
}
您可以使用 allowsHitTesting
:
禁用顶部图像的触摸交互
Image("SEGMENTED_IMAGE_REMOVE_BACKGROUND") // The image that will be the front
.resizable()
.frame(width: abs(geo.size.width - 32), height: abs(round((geo.size.width / 2) * 2.438)), alignment: .center)
.allowsHitTesting(false)
希望你们中的任何人能帮助我并给我建议。
我的任务是用 SwiftUI 制作一个照片编辑应用程序。 在应用程序中有一个功能可以从人的照片中删除背景(因此只有人的对象),然后我创建了一个新的 UIImage 作为图层,用可以移动的图像替换背景(在照片后面)背景已被移除),因此它位于当我尝试拖动新背景但我不能时,因为从背景中移除的相框挡住了新的 UIImage 背景。
这是我编写的代码。
struct MaskImage: View {
@State var currentPositions = CGPoint.init(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/4)
@State var currentPosition = CGPoint.init(x: UIScreen.main.bounds.width/2, y: UIScreen.main.bounds.height/4)
@GestureState private var isDragging = false
var body: some View {
GeometryReader { geo in
HStack {
VStack {
Spacer()
ZStack {
Image("EFFECT-1") // DRAGGABLE PHOTO BACKGROUND
.resizable()
.frame(width: abs(geo.size.width-32), height: 375, alignment: .center)
.position(currentPosition)
.gesture(
DragGesture()
.onChanged { value in
self.currentPosition = value.location
}
.updating($isDragging) { (value, state, transaction) in // 1, 2
state = true
self.currentPosition = value.location
}
)
Image("SEGMENTED_IMAGE_REMOVE_BACKGROUND") // The image that will be the front
.resizable()
.frame(width: abs(geo.size.width - 32), height: abs(round((geo.size.width / 2) * 2.438)), alignment: .center)
}
Spacer()
}
}
.background(Color.red)
}
}
}
您可以使用 allowsHitTesting
:
Image("SEGMENTED_IMAGE_REMOVE_BACKGROUND") // The image that will be the front
.resizable()
.frame(width: abs(geo.size.width - 32), height: abs(round((geo.size.width / 2) * 2.438)), alignment: .center)
.allowsHitTesting(false)