当我向下滚动地图时,在某个位置它已经到达应用程序崩溃。它显示错误,因为值不在预期范围内
下面是我在 UWP 中的自定义渲染图。
public class CustomMapRenderer: MapRenderer
{
MapControl nativeMap;
List<CustomPin> customPins;
MapOverlay mapOverlay;
bool xamarinOverlayShown = false;
private bool isMapLoaded;
public BasicGeoposition NorthwestCorner { get; }
public BasicGeoposition SoutheastCorner { get; }
protected override void OnElementChanged(ElementChangedEventArgs<Map> e)
{
try
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
nativeMap.Children.Clear();
mapOverlay = null;
nativeMap = null;
}
if (e.NewElement != null)
{
var formsMap = (CustomMap)e.NewElement;
nativeMap = Control as MapControl;
nativeMap.Loaded += ((sender, re) =>
{
formsMap.MapLoaded();
});
nativeMap.Loading += (sender, args) =>
{
var pin = MapViewModel.GetCurrentPin();
if (pin != null)
SetPins(pin);
};
formsMap.ClearPins = () =>
{
if (nativeMap != null)
{
nativeMap.Children.Clear();
nativeMap.MapElements.Clear();
}
};
formsMap.LoadPins = Pins =>
{
if (Pins != null)
foreach (var pin in Pins)
{
SetPins(pin);
}
};
}
}
catch (Exception ex)
{
LogTracking.LogTrace(ex.ToString());
}
}
private void SetPins(CustomPin pin)
{
try
{
var snPosition = new BasicGeoposition { Latitude = pin.Pin.Position.Latitude, Longitude = pin.Pin.Position.Longitude };
var snPoint=new Geopoint(snPosition);
var mapIcon = new MapIcon();
pin.ImageUrl = (pin.ImageUrl == null || pin.ImageUrl == string.Empty) ? "mapPin.png" : pin.ImageUrl;
mapIcon.Image = RandomAccessStreamReference.CreateFromUri(new Uri(string.Format("ms-appx:///{0}", pin.ImageUrl)));
mapIcon.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
mapIcon.Location = snPoint;
mapIcon.NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0);
mapOverlay = new MapOverlay(pin);
MapControl.SetLocation(mapOverlay, snPoint);
MapControl.SetNormalizedAnchorPoint(mapOverlay, new Windows.Foundation.Point(0.5, 1.0));
xamarinOverlayShown = true;
if (nativeMap != null)
{
nativeMap.Children.Add(mapOverlay);
nativeMap.MapElements.Add(mapIcon);
}
}
catch (Exception ex)
{
LogTracking.LogTrace(ex.ToString());
}
}
}