我尝试使用Xamarin.Forms.Maps,它缺少很多功能,所以我决定使用MKMapView创建一个iOS ViewRenderer并添加自定义图片等等,但我不知道如何制作一个ViewRenderer以及如何MKMapView有效。有人可以很友好地告诉我它是如何工作的,并给我一个简单的例子来展示地图。
我只想为显示MKMapView的ios做一个自定义渲染,其余我可能想出来,但我甚至无法弄清楚如何让它从viewrenderer中显示出来。
答案 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:我从头脑中动态编写了这段代码,我没有经过测试,但它可以帮助你开始