60 строки
1.9 KiB
C#
Executable File
60 строки
1.9 KiB
C#
Executable File
using MapKit;
|
|
using MapOverlay;
|
|
using MapOverlay.iOS;
|
|
using ObjCRuntime;
|
|
using UIKit;
|
|
using Xamarin.Forms;
|
|
using Xamarin.Forms.Maps.iOS;
|
|
using Xamarin.Forms.Platform.iOS;
|
|
|
|
[assembly: ExportRenderer(typeof(CustomMap), typeof(CustomMapRenderer))]
|
|
namespace MapOverlay.iOS
|
|
{
|
|
public class CustomMapRenderer : MapRenderer
|
|
{
|
|
MKCircleRenderer circleRenderer;
|
|
|
|
protected override void OnElementChanged(ElementChangedEventArgs<View> e)
|
|
{
|
|
base.OnElementChanged(e);
|
|
|
|
if (e.OldElement != null)
|
|
{
|
|
var nativeMap = Control as MKMapView;
|
|
if (nativeMap != null)
|
|
{
|
|
nativeMap.RemoveOverlays(nativeMap.Overlays);
|
|
nativeMap.OverlayRenderer = null;
|
|
circleRenderer = null;
|
|
}
|
|
}
|
|
|
|
if (e.NewElement != null)
|
|
{
|
|
var formsMap = (CustomMap)e.NewElement;
|
|
var nativeMap = Control as MKMapView;
|
|
var circle = formsMap.Circle;
|
|
|
|
nativeMap.OverlayRenderer = GetOverlayRenderer;
|
|
|
|
var circleOverlay = MKCircle.Circle(new CoreLocation.CLLocationCoordinate2D(circle.Position.Latitude, circle.Position.Longitude), circle.Radius);
|
|
nativeMap.AddOverlay(circleOverlay);
|
|
}
|
|
}
|
|
|
|
MKOverlayRenderer GetOverlayRenderer(MKMapView mapView, IMKOverlay overlayWrapper)
|
|
{
|
|
if (circleRenderer == null && !Equals(overlayWrapper, null))
|
|
{
|
|
var overlay = Runtime.GetNSObject(overlayWrapper.Handle) as IMKOverlay;
|
|
circleRenderer = new MKCircleRenderer(overlay as MKCircle)
|
|
{
|
|
FillColor = UIColor.Red,
|
|
Alpha = 0.4f
|
|
};
|
|
}
|
|
return circleRenderer;
|
|
}
|
|
}
|
|
}
|