2016-06-12 2 views
0

Я создаю приложение ReactNative iOS, которое использует MapView. (На самом деле, сейчас я тестирую react-native-maps, но я думаю, что они, по крайней мере, в основном похожи.)React-Native: как определить, отслеживает ли MapView местоположение пользователя?

Я хочу реализовать «центральную карту вокруг меня», сродни той, что есть в Maps.app от Apple.

В первом из этих двух снимков экрана (извините за размер), выделяется синяя кнопка и карта правильно расположена вокруг моего текущего местоположения:

Centered on me

Во втором скриншоте, Я немного изменил карту, так что она больше не сосредоточена на моем текущем местоположении, и кнопка больше не выделяется.

I panned the map

Если я нажимаю на кнопку, карта привязывается к моему текущему местоположению снова.

Как я могу реализовать эту кнопку в своем приложении?

Я не вижу никакого способа получить доступ к состоянию карты (т. Е. Отслеживает местоположение пользователя или нет).

ответ

0

Во-первых, о том, что

(Actually, right now I'm testing react-native-maps, but I think they're at least largely similar.)

не так, как они используют различные собственные файлы для обработки мост между React и IOS/Android.

Что касается адаптивных карт, вы можете анимировать координаты центра карты с использованием метода animateToCoordinate, который документирован here. Для этого вы должны дать ссылку на свой MapView (и, возможно, даже использовать класс 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} 
); 
} 

И этот метод вызывается из вашей кнопки.

+0

ОК, это отвечает на часть моего вопроса, но не на все. Я также надеялся получить советы о том, как узнать, когда карта будет удалена от местоположения текущего пользователя. – escouten

+0

Это можно сделать с помощью функции onRegionChange/onRegionChangeComplete функции Mapview. В качестве аргумента вы будете иметь текущую область (lat lng и lat, lng delta's), и вы можете сравнить ее с местоположением пользователя. Если ваше местоположение пользователя не находится внутри региона, вы можете вызвать conterOnUser. Помогает ли это? – user2015762

+0

ОК, это «работает», но не так гладко, как приложение Apple Maps. Принимая, но все же надеясь на лучший ответ. – escouten