c# - 选择 MKPolygon 点击
问题描述
我正在尝试允许用户使用 xamarin 表单 iOS 在地图上选择多边形并将笔画应用于他们选择的多边形。我无法弄清楚如何以这种方式在 c# 中创建点击手势。
我正在通过创建多边形
var blockOverlay = MKPolygon.FromCoordinates(coords);
Constants.nativeMap.AddOverlay(blockOverlay);
理想情况下,我希望它看起来像我的 Android 地图
解决方案
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
叠加层,如果没有,请进行相应调整。
推荐阅读
- python - 尝试划分两个屏蔽数组时出现类型错误
- html - knitr:编织到 HTML - 为图形和表格编号添加前缀
- java - Docker 找不到用户:OpenJdk11 的 passwd 文件中没有匹配的条目
- angular - 错误参考错误:在 Angular 项目中未定义科尔多瓦
- python-3.x - Python 变量范围捕获规则
- jquery - jQuery 命令在浏览器的控制台中有效,但在代码中无效
- java - 使用 Gradle 下载多个文件
- javascript - 忽略本地计算机时间并使用 momentjs 从时区获取日期和时间
- javascript - 图像和纹理未在三个 js 中加载
- mysql - 将表导入服务器时Mysql TIMEANDDATE发生变化