Как я могу сделать длинный пресс-событие в MapKit - PullRequest
0 голосов
/ 24 февраля 2020

Я могу сделать событие клика аннотацией в MapKit, но Как сделать событие аннотации длинным нажатием в MapKit?

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
        let annotation = view.annotation
        let user = (annotation as! PointAnnotation).user
        let me = mainStore.state.profile
        if user === me {
            return
        }
        let vc = ChatVC.storyBoardInstance
        vc.user = user
        self.navigationController?.pushViewController(vc, animated: true)
    }

Это код события клика.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Swift5 : в вашем viewDidLoad (),

    let lpgr = UILongPressGestureRecognizer(target: self, 
                         action:#selector(self.handleLongPress))
    lpgr.minimumPressDuration = 1
    lpgr.delaysTouchesBegan = true
    lpgr.delegate = self
    self._mapView.addGestureRecognizer(lpgr)

и реализовать это в вашем контроллере,

@objc func handleLongPress(gestureRecognizer: UILongPressGestureRecognizer) {
        if gestureRecognizer.state != UIGestureRecognizer.State.ended {
            return
        }
        else if gestureRecognizer.state != UIGestureRecognizer.State.began {

            let touchPoint = gestureRecognizer.location(in: self.mapView)

        let touchMapCoordinate =  self._mapView.convert(touchPoint, toCoordinateFrom: _mapView)
        yourAnnotation.subtitle = "You long pressed here"
        yourAnnotation.coordinate = touchMapCoordinate
        self._mapView.addAnnotation(yourAnnotation)
    }

}

0 голосов
/ 24 февраля 2020

Теоретически вы можете добавить распознаватель жестов длинным нажатием в MapView, а затем проверить состояние распознавателя в методе выбора для аннотации. Например, если вы хотите, чтобы что-то произошло во время выполнения жеста, вы можете проверить, что состояние распознавателя не завершено или отменено.

Например:

if recognizer.state == .ended || recognizer.state == .cancelled || recognizer.state == .failed {
            // this would cover the gesture no longer being in progress
        } else if recognizer.state == .began {
            // handle the gesture beginning
        } 

Я всегда добавляю распознаватель жестов в раскадровку, просто перетаскивая его на карту, затем создавая розетки / действия. Если вы хотите сделать это программно, вы можете прочитать больше здесь .

...