我正在使用一些形状在swiftui中创建一个自定义按钮。
作为一个最小的例子,我有一个填充矩形,由一个划圆(没有填充)包围。这个包在一个zstack中,并添加了一个tappershite。它是有效的,但我唯一的问题是正方形和圆形之间的空白是不可录制的。
如何使圆内的所有内容都可录制,而不向圆添加填充?

struct ConfirmButton: View {
  var action: () -> Void

  var body: some View {
    ZStack {
      Circle()
        .stroke(Color.purple, lineWidth: 10.0)
        .padding(5)
      Rectangle()
        .fill(Color.red)
        .frame(width: 200, height: 200, alignment: .center)
    }.gesture(
      TapGesture()
        .onEnded {
          print("Hello world")
          self.action()
      }
    )
  }
}

swift - SwiftUI:如何使整个形状在笔触时可以识别手势?-LMLPHP

最佳答案

你需要用modifier.contentShape()定义命中区域:

struct ConfirmButton: View {
  var action: () -> Void

  var body: some View {
    ZStack {
      Circle()
        .stroke(Color.purple, lineWidth: 10.0)
        .padding(5)
      Rectangle()
        .fill(Color.red)
        .frame(width: 200, height: 200, alignment: .center)
    }.contentShape(Circle())
     .gesture(
      TapGesture()
        .onEnded {
          print("Hello world")
          self.action()
      }
    )
  }
}

07-27 13:45