1

我正在 Xamarin Forms 中开发一个应用程序,该应用程序具有一个自定义地图,其中带有显示地图上地点徽标的图钉。一切都运行良好,除了如果我稍微玩一下地图(例如移动到另一个位置或转动地图然后回来),我会看到引脚交换了它们的位置。(见下图)

这是他们的初始位置

这是他们操纵后的样子

任何想法为什么会发生这种情况?

4

1 回答 1

1

我自己解决了。事实证明,每次调用 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;
    }
于 2016-08-22T08:19:14.817 回答