0

我正在 Titanium Appcelerator 中创建一个 iOS 应用程序,其中包含一个仪表板窗口和 2 个附加窗口。其中一个包含一个地图视图,加载时间约为 3 秒,这对于查看空白屏幕来说是很长的时间。

在 Appcelerator 论坛中,有人发布了这篇文章,询问如何刷新到用户的位置,只有当它改变了一定量时,我已经实现了。我目前的实现如下:

  1. 设置距离过滤器,使其仅在重大移动时刷新

    Titanium.Geolocation.distanceFilter = 10;
    
  2. 在一个无关紧要的起始位置 (0,0) 创建一个地图视图并将其添加到窗口中

    var mapview = Titanium.Map.createView({
        mapType: Titanium.Map.STANDARD_TYPE,
        region: {latitude: 0, longitude: 0, latitudeDelta:0.05, longitudeDelta:0.05},
        animate:false,
        regionFit:true,
        userLocation:false
    });
    
    win.add(mapview);
    
  3. 获取用户位置并将地图视图的位置设置为它

    //Should only go once
    Titanium.Geolocation.getCurrentPosition(function(e)
    {
        if (e.error)
        {
            alert('Cannot get your current location');
            return;
        }
    
        var longitude = e.coords.longitude;
        var latitude = e.coords.latitude;
        var altitude = e.coords.altitude;
        var heading = e.coords.heading;
        var accuracy = e.coords.accuracy;
        var speed = e.coords.speed;
        var timestamp = e.coords.timestamp;
        var altitudeAccuracy = e.coords.altitudeAccuracy;
    
        var current = {
                latitude : latitude,
                longitude : longitude,
                latitudeDelta : .05,
                longitudeDelta : .05
            };
        mapview.setLocation(current);
        mapview.userLocation = true;
    });
    

我只想快速加载地图。如果需要几秒钟来确定用户的位置,那很好。但是让用户看一个空白屏幕 3 秒钟是可怕的。有没有解决的办法?

我还设置了:

Titanium.Geolocation.accuracy = Titanium.Geolocation.ACCURACY_BEST;

如果它有所作为。

编辑:我注释掉了我获取用户位置的部分,并且地图仍然需要相同的时间来加载。我认为问题与我在创建 map.js 文件之前打开它的事实有关。

在我的 app.js 文件中,我调用了 map.open()。然后在我的 map.js 文件的顶部,我这样做:

var win = Ti.UI.currentWindow;

然后我构建地图并添加它。我不知道如何保留我的架构但预加载地图。这可能吗?

4

1 回答 1

0

无需使用任何 Titanium.Geolocation 方法或事件监听器。仅在地图视图上尝试使用用户位置为真,它反映了地图上的用户位置。

首先打开地图窗口。

距离过滤器适用于 Titanium.Geolocation 的事件监听器。你能分享你的代码吗?然后我会建议你一个适当的解决方案。

如果你想使用 Titanium.Geolocation 方法或事件监听器来改变地图的位置。

Titanium.Geolocation.getCurrentPosstion()将其放入 setInterval 函数中,该函数在特定时间间隔后调用 function(Titanium.Geolocation)。打开地图窗口后使用此功能。

Titanium.Geolocation.addEventListener('location',function( ){ ... }); 使用距离过滤器,它会在特定距离后触发。

于 2013-08-15T03:47:50.557 回答