Wednesday, 7 October 2020

UIGestureRecognizer.State is 'possible' and not 'recognized' every other click on an MKMapView

I am trying to understand a reproducible bug with my gesture recognisers. I have 2 recognisers on an MKMapView, one UITapGestureRecognizer and one UILongPressGestureRecogniser. Both of them work as expected the first time, however, if I use the long press (which adds an annotation to the map) the next tap gesture will return in the 'possible' state but never hit the 'recognized' state.

▿ Optional<Array<UIGestureRecognizer>>
  ▿ some : 2 elements
    - 0 : <UITapGestureRecognizer: 0x7fda7543ebc0; state = Possible; view = <MKMapView 0x7fda78026e00>>
    - 1 : <UILongPressGestureRecognizer: 0x7fda7543e8c0; state = Possible; view = <MKMapView 0x7fda78026e00>; numberOfTapsRequired = 0; minimumPressDuration = 0.2>

After I tap once, and nothing happens, a second tap will then perform the associated function i.e. make it to the recognized state.

I am intercepting all the clicks on the window and the tap definitely takes place each time but the first one after a long press never seems to become accepted. Is there something I'm missing here? The gestures are added as below:

let mapTap = UITapGestureRecognizer(target: self, action: #selector(mapTapped(_:)))
        mapView.addGestureRecognizer(mapTap)

let pressGesture = UILongPressGestureRecognizer(target: self, action: #selector(mapLongPress(_:)))
            pressGesture.minimumPressDuration = 0.2
            pressGesture.numberOfTouchesRequired = 1
            mapView.addGestureRecognizer(pressGesture)

Could this be to do with the other gestures which are added by default on an MKMapView?



from UIGestureRecognizer.State is 'possible' and not 'recognized' every other click on an MKMapView

No comments:

Post a Comment