xamarin表单中的MoveToRegion行为很奇怪

时间:2016-05-10 19:26:59

标签: ios mkmapview xamarin.forms xamarin.forms.labs

我在我的应用程序中使用了Map控件,我需要设置可见区域,使其覆盖所有引脚。 具有讽刺意味的是同样的代码在平台上都不起作用,iOS的工作方式笨拙,下面的代码在两个平台上都产生了几乎相同的可见区域。

 if(Device.OS == TargetPlatform.iOS)
                customMap.MoveToRegion (MapSpan.FromCenterAndRadius (customMap.CustomPins [0].Pin.Position, Distance.FromMiles (0.20)));
if(Device.OS == TargetPlatform.Android)
                customMap.MoveToRegion (MapSpan.FromCenterAndRadius (customMap.CustomPins [0].Pin.Position, Distance.FromMiles (55.0)));

任何人都可以解释一下吗?为什么我需要像它一样编码。

2 个答案:

答案 0 :(得分:2)

我找到了一个解决方法,我在接受我自己的答案之前等待一些解释

Device.StartTimer(TimeSpan.FromMilliseconds(500), () =>
                    {
                        customMap.MoveToRegion(MapSpan.FromCenterAndRadius(customMap.CustomPins [0].Pin.Position, Distance.FromMiles(55.0)));
                        return false;
                    });

答案 1 :(得分:0)

在IOS和Android上使用Xamarin Geolocator插件尝试以用户当前位置为中心时,我遇到了MovetoRegion被延迟(15-30秒)的问题。 Saket Kumar的方法延迟500毫秒,事情变得更好。这是我的代码片段,希望这有助于某人。

    private void CenterOnMe_Clicked(object sender, EventArgs e)
    {
        var locator = CrossGeolocator.Current;
        var t = Task.Run(async () =>
        {
            var position = await locator.GetPositionAsync(TimeSpan.FromSeconds(10));
            Device.StartTimer(TimeSpan.FromMilliseconds(500), () =>
            {
                AroundMeMap.MoveToRegion(

                    MapSpan.FromCenterAndRadius(

                        new Position(position.Latitude, position.Longitude), Distance.FromMiles(1)));
                return false;
            });
        });
    }