我正在 Titanium Appcelerator 中创建一个 iOS 应用程序,其中包含一个仪表板窗口和 2 个附加窗口。其中一个包含一个地图视图,加载时间约为 3 秒,这对于查看空白屏幕来说是很长的时间。
在 Appcelerator 论坛中,有人发布了这篇文章,询问如何刷新到用户的位置,只有当它改变了一定量时,我已经实现了。我目前的实现如下:
设置距离过滤器,使其仅在重大移动时刷新
Titanium.Geolocation.distanceFilter = 10;
在一个无关紧要的起始位置 (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);
获取用户位置并将地图视图的位置设置为它
//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;
然后我构建地图并添加它。我不知道如何保留我的架构但预加载地图。这可能吗?