title: How to get tap location when using scaleEffect
body: <p>I have a ZStack with an Image and a small circle, and some gestures for panning and zooming in/out on the Image.  I want the small circle to change location based on where the user taps.  Everything is working fine until I start zooming in with scaleEffect.  How can I account for the current scale value when placing the circle? (See <code>TODO: Fix tap point when scaled</code> for where the issue is.)</p>
  
  <pre><code>struct PodMapTest: View {
  
      @State var circlePosition = CGPoint.zero
      @State var position = CGSize.zero
  
      @State var scale: CGFloat = 1.0
      @State var lastScaleValue: CGFloat = 1.0
  
      @State var tapPoint: CGPoint = CGPoint.zero
      @State var dragSize: CGSize = CGSize.zero
      @State var lastDrag: CGSize = CGSize.zero
  
      @GestureState private var dragOffset = CGSize.zero
      var body: some View {
          VStack {
              Spacer()
              ZStack {
                  Image("floorPlan")
                      .resizable()
                  self.circle
              }
              .scaledToFit()
              .animation(.linear)
              .scaleEffect(self.scale)
              .offset(self.dragSize)
              .gesture(MagnificationGesture().onChanged { val in
                  let delta = val / self.lastScaleValue
                  self.lastScaleValue = val
                  self.scale = self.scale * delta
  
              }.onEnded { val in
                  // without this the next gesture will be broken
                  self.lastScaleValue = 1.0
                  }
  
              )
                  .simultaneousGesture(DragGesture(minimumDistance: 1, coordinateSpace: .local).onChanged({ val in
                      print("dragging map")
                      self.tapPoint = val.startLocation
                      self.dragSize = CGSize(width: val.translation.width + self.lastDrag.width, height: val.translation.height + self.lastDrag.height)
                  })
                      .onEnded({ (val) in
                          self.dragSize = CGSize(width: val.translation.width + self.lastDrag.width, height: val.translation.height + self.lastDrag.height)
                          self.lastDrag = self.dragSize
                      }))
                  .simultaneousGesture(DragGesture(minimumDistance: 0, coordinateSpace: .local).onChanged({ (val) in
  
  
                          // TODO: Fix tap point when scaled
                          let tapPoint = CGPoint(x: val.startLocation.x - self.dragSize.width, y: val.startLocation.y - self.dragSize.height)
                          self.circlePosition = tapPoint
                  }))
              Spacer()
          }
      }
  
      var circle: some View {
          Circle()
              .frame(width: 20, height: 20, alignment: .center)
          .position(circlePosition)
      }
  }
  </code></pre>