关于小程序bindregionchange事件在IOS崩溃的问题

时间:2021-02-05 02:33:23
  • 先说下原因,我在bindregionchange事件触发函数中设置了经纬度,而latitude和longitude是绑定在map组件上的,滑动地图的过程中重新设置了地图中心点的经纬度,会导致地图本身的滑动,手动滑动地图和地图本身的移动在某些情况下会冲突,也就导致了有时候会划不动的情况了
    this.setData({
        latitude: res.latitude,
        longitude: res.longitude
    });
  • 解决办法就是,在该事件函数中不设置地图中心点的经纬度,如果需要用到地图中心点的经纬度,则用临时变量来替代。阐述一下我这里的场景是怎样的,当地图滑动的时候,我需要拿到地图中心点的经纬度,与上一次保存的地图中心点经纬度进行距离的计算,如果距离满足一定要求,比如大于3000米,则请求该新的地图中心点周围满足要求的点,然后地图上打点显示,下面这段代码块是位于getCenterLocation函数的success回调中
  // 3. 设置临时地图中心点的经纬度 如果经纬度和上一次的经纬度相等 或者 移动距离小于1米 则直接返回
  if ((res.latitude == latitude && res.longitude == longitude) || distance < 1) {
    return;
  }
  that.setData({
    tmpLatitude: res.latitude,
    tmpLongitude: res.longitude
  });
  • 说一下我遇到的另一个问题,就是在IOS上,点击地图组件上的跳转到当前位置的图标,一直不起作用,要点击两三次之后才起作用,之后猜测可能是执行moveToLocation的时候与其它线程冲突了,导致了没反应,用了下面的代码解决了问题,延迟200毫秒再执行moveToLocation
    var that = this;
    setTimeout(function () {
      that.mapCtx.moveToLocation();
    }, 200)
  • 这里顺带记录一下,小程序中获取view高度的方法
    var that = this;
    var query = wx.createSelectorQuery();
    query.select('#cabinetInfo').boundingClientRect()
    query.exec(function (res) {
      that.setControls(res[0].height);
    })