protected virtual IMKAnnotation CreateAnnotation(Pin pin)
        {
            var mk = new CustomMKAnnotation
            {
                Pin               = pin,
                Title             = pin.Label,
                Subtitle          = pin.Address ?? "",
                CustomMapRenderer = this,
                Coordinate        = new CLLocationCoordinate2D(pin.Position.Latitude, pin.Position.Longitude)
            };

            return(mk);
        }
        protected virtual MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation)
        {
            MKPinAnnotationView mapPin = null;

            // https://bugzilla.xamarin.com/show_bug.cgi?id=26416
            var userLocationAnnotation = Runtime.GetNSObject(annotation.Handle) as MKUserLocation;

            if (userLocationAnnotation != null)
            {
                return(null);
            }

            const string defaultPinId = "defaultPin";

            mapPin = mapView.DequeueReusableAnnotation(defaultPinId) as MKPinAnnotationView;
            if (mapPin == null)
            {
                mapPin = new MKPinAnnotationView(annotation, defaultPinId);
                mapPin.CanShowCallout = true;
            }

            mapPin.Annotation = annotation;
            AttachGestureToPin(mapPin, annotation);
            if (annotation is CustomMKAnnotation)
            {
                CustomMKAnnotation ann = (CustomMKAnnotation)annotation;

                if (!(ann.Pin is CustomPin))
                {
                    return(mapPin);
                }

                CustomPin cpin = (CustomPin)ann.Pin;
                if (cpin.type == CustomPin.MOVABLE)
                {
                    mapPin.Draggable = true;
                    //mapPin.AccessibilityDragSourceDescriptors.
                    mapPin.Image         = UIImage.FromFile("shape_circle.png");
                    mapPin.CalloutOffset = new CGPoint(0, 0);
                    mapPin.PinColor      = MKPinAnnotationColor.Green;
                }
                else if (cpin.type == CustomPin.HOLE)
                {
                    //marker.SetIcon(BitmapDescriptorFactory.FromResource(Resource.Drawable.flag));
                    mapPin.Image         = UIImage.FromFile("flag.png");
                    mapPin.CalloutOffset = new CGPoint(0, 0);
                }
                else if (cpin.type == CustomPin.HOLE)
                {
                }
                else if (cpin.type == CustomPin.USER)
                {
                    mapPin.PinColor = MKPinAnnotationColor.Purple;
                }
                else if (cpin.type == CustomPin.LOCKED)
                {
                    mapPin.PinColor = MKPinAnnotationColor.Purple;
                }
            }


            return(mapPin);
        }