-2

希望你们中的任何人都可以帮助我并给我建议。

我的任务是使用 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)
    }
  }
}
4

1 回答 1

1

您可以使用以下方法禁用顶部图像的触摸交互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)
于 2021-09-20T10:49:19.593 回答