Как получить доступ к MKAnnotationView пользователя на iOS - PullRequest
0 голосов
/ 22 января 2019

В соответствии с этим учебным пособием я добавил средство рендеринга для CustomMap в свой проект iOS Xamarin.Forms.Я хотел бы перезаписать базовый Pin пин-кодом текущего местоположения пользователя (т.е. белый / синий круг).Поэтому я добавил класс CustomMapRenderer, который переопределяет метод GetViewForAnnotation следующим образом

protected override MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation)
    {
        MKAnnotationView annotationView = null;

        if (annotation is MKUserLocation)
            return null;

        var customPin = getTrackPin(annotation as MKPointAnnotation);
        if (customPin == null)
        {
            throw new Exception("Custom pin not found");
        }

        annotationView = mapView.DequeueReusableAnnotation(customPin.Id.ToString());
        if (annotationView == null)
        {
            annotationView = new TrackMKAnnotationView(annotation, customPin.Id.ToString());
            annotationView.Image = UIImage.FromFile("pin.png");
            annotationView.CalloutOffset = new CGPoint(0, 0);
            annotationView.LeftCalloutAccessoryView = new UIImageView(UIImage.FromFile("monkey.png"));
            annotationView.RightCalloutAccessoryView = UIButton.FromType(UIButtonType.DetailDisclosure);
            ((TrackMKAnnotationView)annotationView).Id = customPin.Id.ToString();
            ((TrackMKAnnotationView)annotationView).Url = customPin.url;
        }
        annotationView.CanShowCallout = true;

        return annotationView;
    }

Однако вместо того, чтобы делать

annotationView.Image = UIImage.FromFile("pin.png");

, я хотел бы получить UIImageбулавки, представляющей текущее местоположение пользователя, например (псевдокод):

annotationView.Image = UIImage.UserPin;

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 22 января 2019

Когда вы проверяете, является ли аннотация MKUserLocation, удаляйте return null.

Вместо возврата null настройте аннотацию

if annotation is MKUserLocation {
    let pin = mapView.view(for: annotation) as? MKPinAnnotationView ?? MKPinAnnotationView(annotation: annotation, reuseIdentifier: nil)
    pin.image = UIImage(named: "imageName")
    return pin // 1

}

1. Верните свой пин-код

...