我正在用Titanium(v5.0.4,sdk 5.1.2GA)编写一个跨平台的移动应用程序。该应用程序显示一个地图,其中包含靠近当前位置的兴趣点标记。如果用户将地图移动到新区域,则删除所有先前显示的标记,并根据新位置计算并显示一组新标记。用户可以单击标记,并显示infoWindow。单击infoWindow将打开一个新窗口以获取更多信息。
这适用于IOS(使用MapKit)。但是,在Android(使用Google地图)上,点击标记会显示infoWindow,但也会将地图置于标记的中心位置,从而触发'regionchanged'事件,这会导致我的应用移除标记并显示新的集合。基本上,用户永远不能单击infoWindow,也无法访问新窗口以获取更多信息。
我想做的事情:阻止Google地图点击时自动平移到标记。
或者,有没有办法区分点击标记后触发的'regionchanged'事件和用户移动地图触发的'regionchanged'事件?这样我就可以对后者做出反应。
我发现了这个(Impossible to prevent auto panning to a marker when clicking on it (google maps)),但这在轨道上是红宝石。我遇到的其他东西(无法找回链接)涉及重载“click”事件处理程序或使用disableAutoPan infoWindow选项(Google Maps: How to prevent InfoWindow from shifting the map),但这些都是针对Javascript API的。
那么,有人知道吗?
答案 0 :(得分:0)
我最近遇到了同样的问题。虽然你提出这个问题需要很长时间,但我认为解决方案值得注意。
click
和regionchanged
个事件 <View id="mapView"
module="ti.map"
onClick="click"
onRegionchanged="regionChanged"
method="createView">
</View>
var clicked = 0;
click
事件设置变量。 var click = function(e) {
clicked = 1;
...
}
regionchanged
包含_.defer(...)
事件的功能。 var regionChanged = function(e) {
_.defer(function(){
... (regionchanged code goes here)
});
}
regionchanged
代码。 var regionChanged = function(e) {
_.defer(function(){
if (clicked == 0) {
... (regionchanged code goes here)
}
});
}
regionchanged
代码末尾的变量。 var regionChanged = function(e) {
_.defer(function(){
if (clicked == 0) {
... (regionchanged code goes here)
}
clicked = 0;
});
}
这里defer
以某种方式确保何时触发两个事件(似乎)regionchanged
事件发生在click事件之后。我认为情况可能并非总是如此,但我的测试并没有让我失望。
我知道我可以使用布尔值来clicked
:)