Map 视图
Props
legalLabelInsets {顶部:数字型;左部:数字型;底部:数字型;右部:数字型}
为 map 嵌入合法的标签,最初是在 map 的左下角。更多信息请看 EdgeInsetsPropType.js
。
maxDelta 数字型
能够显示的区域的最大尺寸。
minDelta 数字型
能够显示的区域的最小尺寸。
onRegionChange 函数型
当用户拖动 map 时,会不断地调用回调函数。
onRegionChangeComplete 函数型
当用户完成移动 map 时,调用一次回调函数。
pitchEnabled 布尔型
当这个属性设置为 true
,且有效的相机与 map 相关联,那么相机的螺旋角用于倾斜 map 的平面。当这个属性设置为false
时,相机的螺旋角被忽略,并且 map 上总是显示为好像用户直接向下看。
region {纬度:数字型,经度:数字型,latitudeDelta:数字型,longitudeDelta:数字型}
该地区会被 map 显示出来。
由中心坐标和坐标跨度定义的区域显示出来。
rotateEnabled 布尔型
当这个属性设置为 true
,且有效的相机与 map 相关联,那么相机的航向角用于围绕 map 中心点旋转 map 平面。当该属性设置为 false
时,相机的航向角被忽略,map 总是定向的,这样真正的北方就会位于 map 视图的顶部。
scrollEnabled 布尔型
如果是 false
,用户无法更改 map 显示的区域。默认值是 true
。
showsUserLocation 布尔型
如果是 true
,应用程序会请求用户的位置并关注它。默认值是 false
。
注意:为了获取地理位置,你需要添加把 NSLocationWhenInUseUsageDescription 键添加到 info.plist,否则就会失败!
style View#style
用于 MapView
的样式设置和布局。更多信息请看 StyleSheet.js
和 ViewStylePropTypes.js
。
zoomEnabled 布尔型
如果是 false
,用户无法缩小/放大 map。默认值是 true
。
例子
'use strict';var React = require('react-native');var StyleSheet = require('StyleSheet');var { MapView, Text, TextInput, View, } = React;var MapRegionInput = React.createClass({ propTypes: { region: React.PropTypes.shape({ latitude: React.PropTypes.number, longitude: React.PropTypes.number, latitudeDelta: React.PropTypes.number, longitudeDelta: React.PropTypes.number, }), onChange: React.PropTypes.func.isRequired, }, getInitialState: function() { return { latitude: 0, longitude: 0, latitudeDelta: 0, longitudeDelta: 0, }; }, componentWillReceiveProps: function(nextProps) { this.setState(nextProps.region); }, render: function() { var region = this.state; return ( <View> <View style={styles.row}> <Text> {'Latitude'} </Text> <TextInput value={'' + region.latitude} style={styles.textInput} onChange={this._onChangeLatitude} /> </View> <View style={styles.row}> <Text> {'Longitude'} </Text> <TextInput value={'' + region.longitude} style={styles.textInput} onChange={this._onChangeLongitude} /> </View> <View style={styles.row}> <Text> {'Latitude delta'} </Text> <TextInput value={'' + region.latitudeDelta} style={styles.textInput} onChange={this._onChangeLatitudeDelta} /> </View> <View style={styles.row}> <Text> {'Longitude delta'} </Text> <TextInput value={'' + region.longitudeDelta} style={styles.textInput} onChange={this._onChangeLongitudeDelta} /> </View> <View style={styles.changeButton}> <Text onPress={this._change}> {'Change'} </Text> </View> </View> ); }, _onChangeLatitude: function(e) { this.setState({latitude: parseFloat(e.nativeEvent.text)}); }, _onChangeLongitude: function(e) { this.setState({longitude: parseFloat(e.nativeEvent.text)}); }, _onChangeLatitudeDelta: function(e) { this.setState({latitudeDelta: parseFloat(e.nativeEvent.text)}); }, _onChangeLongitudeDelta: function(e) { this.setState({longitudeDelta: parseFloat(e.nativeEvent.text)}); }, _change: function() { this.props.onChange(this.state); }, });var MapViewExample = React.createClass({ getInitialState() { return { mapRegion: null, mapRegionInput: null, }; }, render() { return ( <View> <MapView style={styles.map} onRegionChange={this._onRegionChanged} region={this.state.mapRegion} /> <MapRegionInput onChange={this._onRegionInputChanged} region={this.state.mapRegionInput} /> </View> ); }, _onRegionChanged(region) { this.setState({mapRegionInput: region}); }, _onRegionInputChanged(region) { this.setState({ mapRegion: region, mapRegionInput: region, }); }, });var styles = StyleSheet.create({ map: { height: 150, margin: 10, borderWidth: 1, borderColor: '#000000', }, row: { flexDirection: 'row', justifyContent: 'space-between', }, textInput: { width: 150, height: 20, borderWidth: 0.5, borderColor: '#aaaaaa', fontSize: 13, padding: 4, }, changeButton: { alignSelf: 'center', marginTop: 5, padding: 3, borderWidth: 0.5, borderColor: '#777777', }, }); exports.title = '<MapView>'; exports.description = 'Base component to display maps'; exports.examples = [ { title: 'Map', render(): ReactElement { return <MapViewExample />; } }, { title: 'Map shows user location', render() { return <MapView style={styles.map} showsUserLocation={true} />; } } ];