如何使用 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)