Xamarin.Forms - MKMapView iOS渲染

时间:2014-08-19 16:22:54

标签: xamarin.forms

我尝试使用Xamarin.Forms.Maps,它缺少很多功能,所以我决定使用MKMapView创建一个iOS ViewRenderer并添加自定义图片等等,但我不知道如何制作一个ViewRenderer以及如何MKMapView有效。有人可以很友好地告诉我它是如何工作的,并给我一个简单的例子来展示地图。

我只想为显示MKMapView的ios做一个自定义渲染,其余我可能想出来,但我甚至无法弄清楚如何让它从viewrenderer中显示出来。

1 个答案:

答案 0 :(得分:2)

有关如何构建自定义ViewRenderer的简单示例

在你的PCL项目中创建一些不受视角影响的东西:

public class CustomMap: View
{

    public static readonly BindableProperty PinsItemsSourceProperty = BindableProperty.Create ("PinsItemsSource ", typeof(IEnumerable), typeof(CustomMap), null, BindingMode.OneWay, null, null, null, null);

public IEnumerable PinsItemsSource {
        get {
            return (IEnumerable)base.GetValue (CustomMap.PinsItemsSourceProperty );
        }
        set {
            base.SetValue (CustomMap.PinsItemsSourceProperty , value);
        }
    }

}

然后在您的IOS上为该视图创建自定义渲染器,如下所示:

[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer ))]
namespace Xamarin.Forms.Labs.iOS.Controls
{
    public class CustomMapRenderer : ViewRenderer<CustomMap,MKMapView >
    {
        protected override void OnElementChanged (ElementChangedEventArgs<CustomMap> e)
        {
            base.OnElementChanged (e);
            var mapView = new MKMapView (this.Bounds);
            mapView.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;
            foreach(item in e.NewElement.PinsItemsSource )
            {
               //add the points 
               var annotation = new BasicMapAnnotation (new CLLocationCoordinate2D(x,y), "something", "something");
               mapView.AddAnnotation(annotation);

            }
            base.SetNativeControl(mapView);

        }
}

ps:我从头脑中动态编写了这段代码,我没有经过测试,但它可以帮助你开始