Чтобы отобразить пользовательский вид сверху маркера - PullRequest
0 голосов

после нажатия на маркер, как отобразить CustomCalloutView поверх маркера?

сделка в этом методе:

func presentCallout(from rect: CGRect, in view: UIView, constrainedTo constrainedRect: CGRect, animated: Bool) {

    if isCalloutTappable() {
        let gesture = UITapGestureRecognizer(target: self, action: #selector(calloutTapped))
        self.isUserInteractionEnabled = true
        self.addGestureRecognizer(gesture)
    } else {
        self.isUserInteractionEnabled = false
    }

    //Always, Slightly above center
    self.center = view.center.applying(CGAffineTransform(translationX: 0, y: -self.frame.height))
    view.addSubview(self)

}

Как передать ему маркерный кадр?

1 Ответ

2 голосов

решение:

в CustomCalloutView

var annotationPoint: CGPoint

required init(annotation: CustomAnnotation, annotationPoint: CGPoint) {
    self.representedObject = annotation
    self.annotationPoint = annotationPoint
}


func presentCallout(from rect: CGRect, in view: UIView, constrainedTo constrainedRect: CGRect, animated: Bool) {

    self.center = annotationPoint.applying(CGAffineTransform(translationX: 0, y: -self.frame.height - 40.0))

    view.addSubview(self)

}

в MapVC:

 func mapView(_ mapView: MGLMapView, calloutViewFor annotation: MGLAnnotation) -> MGLCalloutView? {        
    let customAnnotation = CustomAnnotation(coordinate: annotation.coordinate, title: title, subtitle: subtitle, image: img!)

    let annotationPoint = mapView.convert(annotation.coordinate, toPointTo: nil)
    return CustomCalloutView(annotation: customAnnotation, annotationPoint: annotationPoint)
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...