tl; dr:由于安全原因,这是不可能的。如果用户应用程序能够创建“合成”触摸,则恶意应用程序可以使用此功能强制用户的设备“独立”执行操作。如果您想阅读我对该主题的研究,请继续阅读。
就我所知,您无法在React Native的JavaScript端执行此操作。您需要设置一些自定义逻辑才能在本机发出本地事件。
原因是React Native的JS端只能处理通过本地桥接收到的本地事件(如触摸)。然后这些事件将触发事件处理代码,例如Touchable*
组件提供的事件处理代码(例如TouchableHighlight
,TouchableOpacity
等)。据我所知,按照单向数据流的原则,没有办法从JS端发出本地事件。
在另一方面,当你可以发射从本机端任意本地事件,你将无法知道什么是JavaScript端做,除非你以某种方式检查得到的数据发送到渲染方法上土着方面,如果不是不可能的话,这可能会很艰难。
去这个问题,因此会创造一个触发时,它被触摸多点触摸事件的本机代码自定义视图类,并作为iOS和Android指南描述它包装成一个阵营机组件的最佳方式。但是,执行此操作时存在以下问题:
在iOS中,没有公开的用户代码创建方法来创建UITouch
对象并将它们分派到UI。你需要使用未公开的API方法来做到这一点,它可以在任何时候改变,如果你尝试将它提交给App Store,将会拒绝你的应用。有一种方法可以做到这一点here,但它可能已经过时,因为苹果公司不保证未公开的API保持稳定。有a fewanswers on SO already为什么在iOS上模拟触摸事件不是一个好主意,将让您的应用程序被拒绝。
在Android上,this has been discussed at length on the android-platform mailing list,普遍认为应该不可能触发来自用户代码的任意触摸事件。试图以编程方式发送MotionEvent
似乎会导致奇怪和不可靠的行为,如在this question的第二个答案中所看到的,对该答案的后续评论以及对this question的回答。
Even React Native不创建自己的触摸事件 - 它只是接收由本机视图生成的触摸事件。所有React Native Gesture Responder System只是包装本机端可用的公共API--用于创建触摸事件的API似乎不公开。
所有这一切都在一起,让我相信你想要做的是根本不可能,而无需使用专用的iOS/Android的API的,很可能是出于安全考虑。
你确定问题不在别的地方吗?你能分享一些你的代码吗? – Xidh
@Xidh我在问题中添加了我的标记和标注。 – User
@用户可以提供完整的代码示例或小提琴吗? – ProllyGeek