xamarin 表单地图上的自定义引脚

Posted

技术标签:

【中文标题】xamarin 表单地图上的自定义引脚【英文标题】:Custom pin on xamarin forms map 【发布时间】:2015-12-02 17:31:07 【问题描述】:

我有一个需要自定义地图图钉的 Xamarin Forms 项目。我在 PCL 中定义了存根,并在继承地图的类中定义了几个附加属性(用于纬度和经度)。

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

以下是我的地图自定义渲染器(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】:

您应该使用MKAnnotationView 而不是MKPinAnnotationView

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

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

MKPinAnnotationView 仅用于默认图标。

【讨论】:

以上是关于xamarin 表单地图上的自定义引脚的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin 表单:UWP 和 Windows 8.1 中的自定义字体

Xamarin表单选项卡页面具有重叠的自定义视图

Xamarin上的自定义复选框默认文本绑定

UWP xamarin 中的自定义渲染器

用户位置的自定义注释视图不移动地图视图

有没有办法将我在 Android 上的自定义渲染器复制到 iOS 平台?