React Native Maps 自定义标记阻塞标记 onPress
React Native Maps Custom Marker blocking Marker onPress
我将自定义标记呈现到我的地图上,并且完全按照我的意愿进行。我正在使用自定义标记,它是视图、图像,然后是特定于图像上事件的文本。
出于某种原因,使用自定义标记视图会阻止标记组件上的 onPress。
我已经测试了 onPress 事件,类似于下面的测试:
<Marker onPress={() => {console.log('Pressed')}}> ...
但仅在我删除标记组件内的自定义标记视图时才记录新闻消息。
自定义标记视图停止 onPress 是否有原因?我如何解决这个问题并为自定义标记触发 onPress 事件?
在下面添加了完整的代码以获得更好的外观。现在它正在工作,但这只是因为我正在为 iOS 使用 onSelect
事件。 onPress
的工作方式与 Android 相同,但与 iOS 不同。
<MapView
style={styles.map}
ref={ map => {this.map = map }}
region={this.state.region}
onRegionChangeComplete={this.onRegionChange}
rotateEnabled={false}
loadingEnabled={true}
>
{matches.map((marker, index) => {
return (
<MapMarker
key={index}
mapMarker={marker}
handlePress={() => {
this.map.animateToRegion({
latitude: marker.location.latlng.latitude,
longitude: marker.location.latlng.longitude
}, 100)
}}
/>
)
})}
</MapView>
MapMarker.js
render() {
const { mapMarker } = this.props;
return (
<Marker
ref={(ref) => {this.markerRef = ref; }}
coordinate={mapMarker.location.latlng}
title={mapMarker.location.streetName}
stopPropagation={true}
pointerEvents='auto'
onPress={() => console.log('pressed')}
onSelect={() => {
this.props.handlePress();
}}
>
<CustomMapMarker
gameType={mapMarker.matchType}
isSanctioned={mapMarker.isSanctioned}
startDate={mapMarker.startAt}
/>
<Callout style={styles.customCallout}>
<CustomMarkerCallout markerInfo={mapMarker} />
</Callout>
</Marker>
);
}
通过添加特定于 iOS 的 onSelect
解决了该问题。 onPress
仅适用于 Android,所以不知道这是否是正确的答案,但目前对我有用。
我将自定义标记呈现到我的地图上,并且完全按照我的意愿进行。我正在使用自定义标记,它是视图、图像,然后是特定于图像上事件的文本。
出于某种原因,使用自定义标记视图会阻止标记组件上的 onPress。
我已经测试了 onPress 事件,类似于下面的测试:
<Marker onPress={() => {console.log('Pressed')}}> ...
但仅在我删除标记组件内的自定义标记视图时才记录新闻消息。
自定义标记视图停止 onPress 是否有原因?我如何解决这个问题并为自定义标记触发 onPress 事件?
在下面添加了完整的代码以获得更好的外观。现在它正在工作,但这只是因为我正在为 iOS 使用 onSelect
事件。 onPress
的工作方式与 Android 相同,但与 iOS 不同。
<MapView
style={styles.map}
ref={ map => {this.map = map }}
region={this.state.region}
onRegionChangeComplete={this.onRegionChange}
rotateEnabled={false}
loadingEnabled={true}
>
{matches.map((marker, index) => {
return (
<MapMarker
key={index}
mapMarker={marker}
handlePress={() => {
this.map.animateToRegion({
latitude: marker.location.latlng.latitude,
longitude: marker.location.latlng.longitude
}, 100)
}}
/>
)
})}
</MapView>
MapMarker.js
render() {
const { mapMarker } = this.props;
return (
<Marker
ref={(ref) => {this.markerRef = ref; }}
coordinate={mapMarker.location.latlng}
title={mapMarker.location.streetName}
stopPropagation={true}
pointerEvents='auto'
onPress={() => console.log('pressed')}
onSelect={() => {
this.props.handlePress();
}}
>
<CustomMapMarker
gameType={mapMarker.matchType}
isSanctioned={mapMarker.isSanctioned}
startDate={mapMarker.startAt}
/>
<Callout style={styles.customCallout}>
<CustomMarkerCallout markerInfo={mapMarker} />
</Callout>
</Marker>
);
}
通过添加特定于 iOS 的 onSelect
解决了该问题。 onPress
仅适用于 Android,所以不知道这是否是正确的答案,但目前对我有用。