Use*_*ser 3 react-native react-native-maps
Android上的地图标记存在问题,似乎无法修复它.解决方法是点击地图标记3次,它将正确打开带有图像的标注/注释.
我怎么能以编程方式做到这一点?每次用户点击时,我想点击标记3次.
<MapView.Marker
key={marker.key}
coordinate={marker.latlng}
title={marker.title}
description={marker.description}
>
<MapView.Callout style={styles.annotation}>
<Image
key={marker.key}
source={{ uri: marker.image }}
style={styles.thumbnail}
/>
</MapView.Callout>
</MapView.Marker>
Run Code Online (Sandbox Code Playgroud)
tl; dr:出于安全原因,这是不可能的.如果用户应用程序能够创建"合成"触摸,恶意应用程序可以使用此功能,以强制用户的设备"独立"行动.如果您想阅读我对该主题的研究,请继续阅读.
就我所知,你不能在React Native的JavaScript端做到这一点.您需要设置一些自定义逻辑,以便在本机端发出本机事件.
这样做的原因是React Native的JS端只能处理它通过本机桥接收的本机事件(如触摸).然后,这些事件将触发事件处理代码,例如Touchable*组件(例如TouchableHighlight,TouchableOpacity和其他人)提供的代码.据我所知,根据单向数据流的原则,无法从JS端发出本机事件.
另一方面,虽然您可以从本机端发出任意本机事件,但除非您以某种方式检查发送到Native端的呈现方法的数据,否则您将无法知道JavaScript端正在做什么.如果不是不可能,可能会非常艰难.
因此,最好的方法是在本机代码中创建一个自定义视图类,每当触摸它时触发多个触摸事件,并将其包装到React Native组件中,如iOS和Android指南中所述.但是,执行此操作时会出现问题:
在iOS中,用户代码没有公开可用的方式来创建UITouch对象并将它们分发到UI.您需要使用未公开的API方法来执行此操作,这可能会随时更改,如果您尝试将其提交到App Store ,则会拒绝您的应用.这里有一种方法可以做到这一点,但它可能已经过时,因为Apple不保证未公开的API保持稳定.有几 对SO已经回答了为什么在iOS模拟触摸事件是不是一个好主意,将让你的应用程序被拒绝.
在Android上,这已经在android-platform邮件列表上进行了详细讨论,普遍的共识是不应该从用户代码触发任意触摸事件.尝试以编程方式发送MotionEvents似乎会导致奇怪和不可靠的行为,如此问题的第二个答案中所见,对该答案的后续评论以及对此问题的回答.
甚至React Native也不会创建自己的触摸事件 - 它只接收由本机视图生成的触摸事件.所有React Native Gesture Responder System都只包含本机可用的公共API - 用于创建触摸事件的API似乎不公开.
所有这一切使我相信,如果不使用私有iOS/Android API,您可能完全不可能做到这一点,这很可能是出于安全考虑.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |