我正在 Xamarin Forms 中开发一个应用程序,该应用程序具有一个自定义地图,其中带有显示地图上地点徽标的图钉。一切都运行良好,除了如果我稍微玩一下地图(例如移动到另一个位置或转动地图然后回来),我会看到引脚交换了它们的位置。(见下图)
任何想法为什么会发生这种情况?
我正在 Xamarin Forms 中开发一个应用程序,该应用程序具有一个自定义地图,其中带有显示地图上地点徽标的图钉。一切都运行良好,除了如果我稍微玩一下地图(例如移动到另一个位置或转动地图然后回来),我会看到引脚交换了它们的位置。(见下图)
任何想法为什么会发生这种情况?
我自己解决了。事实证明,每次调用 mapView.DequeueReusableAnnotation 函数重绘图钉时,它都会返回错误的注释。我删除了该功能,现在每次都创建新的注释来绘制图钉。
如果有人遇到同样的问题,这里是该方法的代码:
MKAnnotationView GetViewForAnnotation(MKMapView mapView, IMKAnnotation annotation)
{
MKAnnotationView annotationView = null;
if (annotation is MKUserLocation)
return null;
var anno = annotation as MKPointAnnotation;
if (anno == null) return null;
var customPin = GetCustomPin(anno);
if (customPin == null)
{
throw new Exception("Custom pin not found");
}
// commented the following line:
//annotationView = mapView.DequeueReusableAnnotation(customPin.Id);
//if (annotationView == null)
//{
annotationView = new CustomMKPinAnnotationView(annotation, customPin.Id);
byte[] resizedLogo = ImageResizer.ResizeImage(customPin.Logo, 32, 32);
var data = NSData.FromArray(resizedLogo);
annotationView.Image = UIImage.LoadFromData(data);
annotationView.CalloutOffset = new CGPoint(0, 0);
annotationView.LeftCalloutAccessoryView = new UIImageView(UIImage.FromFile("logo40.png"));
annotationView.RightCalloutAccessoryView = UIButton.FromType(UIButtonType.DetailDisclosure);
((CustomMKPinAnnotationView)annotationView).Id = customPin.Id;
((CustomMKPinAnnotationView)annotationView).RestID = customPin.RestID;
//}
annotationView.CanShowCallout = true;
return annotationView;
}