Xamarin ios地图圆叠加点击

时间:2017-12-31 21:31:15

标签: xamarin xamarin.forms xamarin.ios

我正在按照地图示例https://developer.xamarin.com/samples/xamarin-forms/customrenderers/map/circle/创建自定义渲染器以覆盖圆圈。它似乎适用于所有3个平台,但我无法找到iOS的任何点击事件。

我正在构建一个xamarin表单应用程序,并能够在Android和UWP上找到点击事件,但iOS似乎很遥远。

有什么办法吗?

1 个答案:

答案 0 :(得分:0)

iOS不提供检测点击事件的API。

作为替代解决方法,我们可以在地图视图中添加UITapGestureRecognizer,并判断分接点是否位于圈内。

解决方案

//xxx
nativeMap.AddOverlay(circleOverlay);
nativeMap.AddGestureRecognizer(new UITapGestureRecognizer(TapHandle));

void TapHandle(UITapGestureRecognizer tap)
{
    MKMapView mapView = tap.View as MKMapView;

    CGPoint tapPoint = tap.LocationInView(mapView);
    CLLocationCoordinate2D tapCoordinate = mapView.ConvertPoint(tapPoint, tap.View);
    MKMapPoint point = MKMapPoint.FromCoordinate(tapCoordinate);

    foreach(IMKOverlay overlay in mapView.Overlays)
    {
        MKCircleRenderer render = GetOverlayRenderer(mapView, overlay) as MKCircleRenderer;
        CGPoint datPoint = render.PointForMapPoint(point);
        render.InvalidatePath();

        if (render.Path.ContainsPoint(datPoint,false))
        {
            break;
        }
    }
}