iOS Swift 4 ... после добавления новой аннотации первое нажатие не обрабатывается ... второе нажатие - PullRequest
0 голосов
/ 08 мая 2020

Если я добавляю новую настраиваемую аннотацию и нажимаю кнопку, чтобы открыть выноску, ИЛИ щелкаю в любом месте карты, ничего не происходит. Если щелкнуть еще раз, все работает ... Есть идеи? Я просмотрел много теорий, но пока не повезло ...

@IBOutlet weak var mapView: MKMapView!

// In ViewDidLoad, I define my LongPressGestureRecognizer
let uilpgr = UILongPressGestureRecognizer(target: self, action: #selector(createNewAnnotation))
uilpgr.minimumPressDuration = 0.25
mapView.addGestureRecognizer(uilpgr)

// And here is the selector:
@objc func createNewAnnotation(_ sender: UIGestureRecognizer) {

let touchPoint = sender.location(in: self.mapView)
let coordinates = mapView.convert(touchPoint, toCoordinateFrom: self.mapView)

let heldPoint = MKPointAnnotation()
heldPoint.coordinate = coordinates

if (sender.state == .began) {
    heldPoint.title = "Set Point"
    heldPoint.subtitle = String(format: "%.4f", coordinates.latitude) + "," + String(format: "%.4f", coordinates.longitude)
    mapView.addAnnotation(heldPoint)

 }        
}

Если я заменю долгое нажатие на распознаватель касаний, появится выноска, но касание создаст еще одну аннотацию ... так долгое нажатие должно быть правильным. Но как я могу обойти эту проблему, чтобы пользователь мог создать аннотацию долгим нажатием, а затем нажать один раз, чтобы получить выноску ??

1 Ответ

0 голосов
/ 09 мая 2020

Итак, я наконец нашел решение после того, как искал целых 3 дня ... Что происходит, так это то, что долгое нажатие продолжает скрывать все другие жесты. Так что следующий тап не распознается, только второй тап. Исправление невероятно простое, фиксируется в селекторе как таковом:

    @objc func createNewAnnotation(_ sender: UIGestureRecognizer) {

    let touchPoint = sender.location(in: self.mapView)
    let coordinates = mapView.convert(touchPoint, toCoordinateFrom: self.mapView)

    let heldPoint = MKPointAnnotation()
    heldPoint.coordinate = coordinates

    if (sender.state == .began) {
        heldPoint.title = "Set Point"
        heldPoint.subtitle = String(format: "%.4f", coordinates.latitude) + "," + String(format: "%.4f", coordinates.longitude)
        mapView.addAnnotation(heldPoint)
 } 
    // Cancel the long press gesture!
    sender.state = .cancelled      
}

С этим миниатюрным изменением LongPress исчезает, а нажатие обрабатывается картой и аннотацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...