Cra*_*ues 5 reactjs react-native react-native-maps
我一直在尝试使用 MapView 上的方法为区域设置动画,为此我需要访问 ref 但它未定义。其他一切都正常工作,我只是无法获得参考,并且任何时候我尝试调用一个方法,例如`
this.map.animateToRegion({
latitude: 0,
longitude: 0,
latitudeDelta: 1,
longitudeDelta: 1
});
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
无法读取未定义的属性“animateToRegion”
<MapView
ref={r => this.map = r}
mapPadding={{ top: 0, left: 0, right: 0, bottom: 400 }}
provider='google'
style={{ flex: 1 }}
region={this.region}
>
{this.renderBarberMarkers()}
</MapView>
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您使用钩子,这是您的方式:
在您的功能之上:
const mapView = React.createRef();
const animateMap = () => {
mapView.current.animateToRegion({ // Takes a region object as parameter
longitude: 28.97916756570339,
latitude: 41,
latitudeDelta: 0.4,
longitudeDelta: 0.4,
},1000);
}
Run Code Online (Sandbox Code Playgroud)
给你的 MapView 一个像这样的引用:
<MapView provider={PROVIDER_GOOGLE} region={{
latitude: 37.78825,
longitude: -122.4324,
latitudeDelta: 0.015,
longitudeDelta: 0.0121,
}}
ref={mapView}
style={{flex:1}}>
</MapView>
Run Code Online (Sandbox Code Playgroud)
最后要做的是触发动画,你可以这样做:
<TouchableOpacity onPress={animateMap}><Text>Start</Text></TouchableOpacity>
Run Code Online (Sandbox Code Playgroud)
小智 5
这是地图视图
<MapView
ref={(map) => { this.map = map; }}
showsUserLocation={true}
showsMyLocationButton={true}
initialRegion={this.state.region}
/>
Run Code Online (Sandbox Code Playgroud)
然后,你需要打电话
//animate to user current location
this.map.animateToRegion(yourRegionObject,1000)
Run Code Online (Sandbox Code Playgroud)
我正在这样使用;
//to get user location
getLocation(){
navigator.geolocation.getCurrentPosition(
(position) => {
let latitude = parseFloat(position.coords.latitude);
let longitude = parseFloat(position.coords.longitude);
console.log('location position: ', position);
let region = {
latitude: latitude,
longitude: longitude,
latitudeDelta: 0.0522,
longitudeDelta: 0.0321,
};
this.setState({region: region});
console.log('position: ', position);
console.log('this.map: ', this.map);
//animate to user current location
this.map.animateToRegion(region,1000)
},
(error) => console.log('position error!!!', error),
{enableHighAccuracy: false, timeout: 3000}
);
}
Run Code Online (Sandbox Code Playgroud)
小智 0
你有没有尝试过使用
React.createRef();
Run Code Online (Sandbox Code Playgroud)
有你的地图吗?
或者
我所做的就是像这样将其导出到课堂之外
export let mapRef: MapView | null;
Run Code Online (Sandbox Code Playgroud)
还创建了导出函数,例如
export function animateToRegion(region: Region, duration?: number) {
if (mapRef) {
mapRef.animateToRegion(region, duration);
}
}
Run Code Online (Sandbox Code Playgroud)
我的 MapView 看起来像这样
<MapView
ref={(c) => mapRef = c}
showsMyLocationButton={false} />
Run Code Online (Sandbox Code Playgroud)
在我的班级之外,这样如果它是一个组件,您可以轻松地调用它。
| 归档时间: |
|
| 查看次数: |
4788 次 |
| 最近记录: |