#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. Работает идеально, спасибо, единственное, что я изменил, это то, что я добавил рендеринг в словарь и повторил его, чтобы я мог изменить цвет / обводку при нажатии.