xamarin表单上的自定义图钉

时间:2015-12-02 17:31:08

标签: xamarin xamarin.ios xamarin.forms

我有一个Xamarin Forms项目需要自定义地图引脚。我在PCL中定义了存根,在继承映射的类中定义了一些额外的属性(对于lat和long)。

地图显示正常,但自定义图像引脚仅显示为标准红色引脚。

下面是我的地图自定义渲染器(iOS版)。从我在各种论坛上看到的情况来看,这应该可以正常工作。

public class CustomMapRenderer : ViewRenderer<CustomMap, MKMapView>
{
    MKMapView mkMapView;

    protected override void OnElementChanged(ElementChangedEventArgs<CustomMap> e)
    {
        base.OnElementChanged(e);
        var map = e.NewElement;

        SetNativeControl(new MKMapView(CGRect.Empty));
        mkMapView = Control;

        MyMapDelegate myMapDelegate = new MyMapDelegate();
        mkMapView.Delegate = myMapDelegate;
        mkMapView.AddAnnotation(new MKPointAnnotation()
            {
                Coordinate = new CLLocationCoordinate2D(map.MapPinLatitude, map.MapPinLongitude)
            });
        mkMapView.MapType = MKMapType.Hybrid;
        mkMapView.ZoomEnabled = true;
    }
}

public class MyMapDelegate : MKMapViewDelegate
{
    protected string annotationIdentifier = "PinAnnotation";

    public override MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation)
    {

        MKAnnotationView anView;

        if (annotation is MKUserLocation)
            return null; 

        // create pin annotation view
        anView = (MKPinAnnotationView)mapView.DequeueReusableAnnotation(annotationIdentifier);

        if (anView == null)
            anView = new MKPinAnnotationView(annotation, annotationIdentifier);

        anView.Image = GetImage("pinned_location.png");
        anView.CanShowCallout = true;

        return anView;
    }

    public UIImage GetImage(string imageName)
    {
        var image = UIImage.FromFile(imageName).Scale(new SizeF() { Height = 20, Width = 30 });

        return image;
    }

有人能说明为什么我没有看到针脚的自定义图像吗?

1 个答案:

答案 0 :(得分:1)

您应该使用MKAnnotationView代替MKPinAnnotationView

// create annotation view
anView = (MKAnnotationView)mapView.DequeueReusableAnnotation(annotationIdentifier);

if (anView == null)
    anView = new MKAnnotationView(annotation, annotationIdentifier);

MKPinAnnotationView仅适用于默认图标。