Выберите MKPolygon при нажатии

#c# #xamarin #xamarin.forms #xamarin.ios

#c# #xamarin #xamarin.forms #xamarin.ios

Вопрос:

Я пытаюсь разрешить пользователям выбирать полигоны на карте с помощью xamarin forms iOS и применять обводку к тем, которые они выбрали. Я не могу понять, как создать жест касания в c # таким образом.

Я создаю полигоны с помощью

 var blockOverlay = MKPolygon.FromCoordinates(coords);
 Constants.nativeMap.AddOverlay(blockOverlay);
 

В идеале я хотел бы, чтобы он выглядел как мой
Карта Android

Ответ №1:

Вы можете добавить a UITapGestureRecognizer к своим MKMapView и преобразовать захваченные координаты касания в точку карты и проверить, существует ли она в любом из ваших наложений.

Пример:

 var uiTapGesture = new UITapGestureRecognizer(tappedGesture =>
{
    foreach (MKPolygon polygon in (tappedGesture.View as MKMapView).Overlays)
    {
        using (var render = new MKPolygonRenderer(polygon))
        {
            var coord2D = nativeMap.ConvertPoint(tappedGesture.LocationInView(nativeMap), nativeMap);
            var mapPoint = MKMapPoint.FromCoordinate(coord2D);
            var polyTouched = render.Path.ContainsPoint(render.PointForMapPoint(mapPoint), true);
            if (polyTouched)
                Console.WriteLine($"tapped: {polygon}");
        }
    }
});
nativeMap.AddGestureRecognizer(uiTapGesture);
 

Примечание: Предполагается, что вы используете MKPolygon для своих наложений, если нет, настройте соответствующим образом.

Комментарии:

1. Работает идеально, спасибо, единственное, что я изменил, это то, что я добавил рендеринг в словарь и повторил его, чтобы я мог изменить цвет / обводку при нажатии.