ReactNative教程

移动设备上的手势识别要比在web上复杂得多。用户的一次触摸操作的真实意图是什么,App要经过好几个阶段才能判断。比如App需要判断用户的触摸到底是在滚动页面,还是滑动一个widget,或者只是一个单纯的点击。甚至随着持续时间的不同,这些操作还会转化。此外,还有多点同时触控的情况。

触摸响应系统可以使组件在不关心父组件或子组件的前提下自行处理触摸交互。具体的实现在ResponderEventPlugin.js文件中,你可以在源码中读到更多细节和文档。

用户之所以会觉得web app和原生app在体验上有巨大的差异,触摸响应是一大关键因素。用户的每一个操作都应该具有下列属性:

这些特性使得用户在使用App时体验更好,因为它们可以让用户大胆试用,而不必担心点错了什么。

响应系统用起来可能比较复杂。所以我们提供了一个抽象的Touchable实现,用来做“可触控”的组件。这一实现利用了响应系统,使得你可以简单地以声明的方式来配置触控处理。如果要做一个按钮或者网页链接,那么使用TouchableHighlight就可以。

一个View只要实现了正确的协商方法,就可以成为触摸事件的响应者。我们通过两个方法去“询问”一个View是否愿意成为响应者:

如果View返回true,并开始尝试成为响应者,那么会触发下列事件之一:

onStartShouldSetResponder与onMoveShouldSetResponder是以冒泡的形式调用的,即嵌套最深的节点最先调用。夺权手势这意味着当多个View同时在*ShouldSetResponder中返回true时,
更多精彩尽在这里,详情点击:http://joericioppo.com/,杜锋被驱逐最底层的View将优先“夺权”。在多数情况下这并没有什么问题,因为这样可以确保所有控件和按钮是可用的。

但是有些时候,某个父View会希望能先成为响应者。我们可以利用“捕获期”来解决这一需求。响应系统在从最底层的组件开始冒泡之前,会首先执行一个“捕获期”,杜锋被驱逐在此期间会触发on*ShouldSetResponderCapture系列事件。因此,如果某个父View想要在触摸操作开始时阻止子组件成为响应者,那就应该处理onStartShouldSetResponderCapture事件并返回true值。

如果觉得JSRUN的教程对您有用,请随意打赏。您的支持将鼓励JSRUN继续提供更好的服务

发表评论

电子邮件地址不会被公开。 必填项已用*标注