【问题标题】:React-Native: How to determine if MapView is currently tracking user location?React-Native:如何确定 MapView 当前是否正在跟踪用户位置?
【发布时间】:2016-06-12 20:25:07
【问题描述】:

我正在构建一个使用 MapView 的 ReactNative iOS 应用程序。 (实际上,我现在正在测试react-native-maps,但我认为它们至少在很大程度上相似。)

我想实现一个“我周围的中心地图”功能,类似于 Apple 的 Maps.app 中的功能。

在这两个屏幕截图中的第一个中(抱歉,尺寸过大),蓝色按钮突出显示并且地图正确定位在我当前位置周围:

在第二个屏幕截图中,我稍微平移了地图,使其不再以我当前位置为中心,并且按钮不再突出显示。

如果我点击按钮,地图会再次快速回到我的当前位置。

如何在我自己的应用中实现这个按钮?

我看不到任何访问地图状态的方法(即它是否跟踪用户的位置)。

【问题讨论】:

    标签: ios maps react-native


    【解决方案1】:

    首先说一下

    (实际上,我现在正在测试 react-native-maps,但我认为它们至少在很大程度上相似。)

    不正确,因为它们使用不同的原生文件来处理 React 和 iOS/Android 之间的桥梁。

    关于 react-native-maps,您可以使用 animateToCoordinate 方法为地图中心坐标设置动画,该方法记录在 here 中。为此,您应该为您的 MapView 提供一个 ref(甚至可以使用 MapView.Animated 类)。

    基本上,你可以像这样声明你的地图

    <MapView.Animated
      ref="map"
      showsUserLocation={true}
    />
    

    然后创建一个方法:

    centerOnUser(){
      navigator.geolocation.getCurrentPosition(
        (position) => {
          this.refs.map.refs.node.animateToCoordinate(position.coords)
        },
        (error) => alert(error.message),
        {enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
      );
    }
    

    并从您的按钮调用此方法。

    【讨论】:

    • 好的,这回答了我的部分问题,但不是全部。我还希望就如何知道地图何时远离当前用户的位置提供建议。
    • 这可以通过 Mapview 的 onRegionChange/onRegionChangeComplete 函数属性来完成。您将拥有当前区域(lat lng 和 lat, lng delta's)作为参数,您可以将其与用户位置进行比较。如果您的用户位置不在该区域内,您可以调用 conterOnUser。这有帮助吗?
    • 好的,这个“有效”,但不如 Apple Maps 应用程序流畅。接受,但仍希望得到更好的答案。
    • @user2015762,嗨,当我尝试这段代码时,我收到以下错误:“未定义不是对象(评估'_this3.refs.map.refs.node.animateToCoordinate')”。有什么建议吗?
    • 你是对的,API 已经改变,你现在应该使用&lt;MapView.Animated ref={ref =&gt; { this.map = ref; }} showsUserLocation={true} /&gt; 然后this.map.animateToCoordinate(position.coords); 告诉我它是否有效,我会更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多