我希望在地图图钉旁边打开一个弹出窗口(按下时),但无法弄清楚如何获取图钉的屏幕位置。
将图钉添加到地图效果很好:
map.Pins.Add(nameOfPin);
..创建事件处理程序也很简单:
nameOfPin.MarkerClicked += OnPinClickedAsync;
下面的事件处理程序应该打开 Pin 图旁边的弹出窗口,但我无法获取 Pin 图屏幕位置。地图位置包含在发送者对象中,但据我所知,屏幕位置不包含在发送者对象中。
async void OnPinClickedAsync(对象?发送者,PinClickedEventArgs args) { var selectedPin = (Pin)发送者; 。 。 。然后什么??如何获取 Pin 图屏幕位置 (Android/iOS) }
有人可以帮忙吗?
PS。我尝试提取事件创建的 Pin 对象的所有信息,但无法找到 Pin 屏幕位置
您可以使用MKMapView.ConvertCooperative方法,可以将地图坐标转换为点。
要使用它,您可以调用平台代码。
假设下面是图钉的点击事件处理程序,
private void BoardwalkPin1_MarkerClicked(object? sender, PinClickedEventArgs e)
{
var mypin = sender as Pin;
float xPos;
float yPos;
#if IOS
var vc = UIApplication.SharedApplication.KeyWindow?.RootViewController;
while(vc.PresentedViewController != null)
{
vc = vc.PresentedViewController;
}
CLLocationCoordinate2D Coordinate = new CLLocationCoordinate2D(mypin.Location.Latitude, mypin.Location.Longitude);
var myPoint = (mymap.Handler.PlatformView as MKMapView).ConvertCoordinate(Coordinate,vc.View);
xPos = (float)myPoint.X;
yPos = (float)myPoint.Y;
#endif
Console.WriteLine(xPos);
Console.WriteLine(yPos);
}
我们得到的xPos
和yPos
是相对于当前视图的位置。
希望有帮助!