View可用的手勢(shì)
// 這三個(gè)方法, 不管是不是最上層組件, 都能響應(yīng)
onTouchStart={()=>console.log('start')}
onTouchMove={()=>console.log('move')}
onTouchEnd={()=>console.log('end')}
PanResponder 手勢(shì)監(jiān)視器
// 創(chuàng)建監(jiān)視器
this.panResponder = PanResponder.create({
onStartShouldSetPanResponder: ()=>{},
...
})
// 在View中使用
<View
{...this.panResponder}
/>
事件參數(shù)
每個(gè)事件都有兩個(gè)返回參數(shù)nativeEvent, gestureState
nativeEvent基本無用
gestureState包含以下成員變量:
- stateID 此次觸摸事件的ID
- moveX 最近一次移動(dòng)的屏幕坐標(biāo)
- moveY
- x0 響應(yīng)器產(chǎn)生時(shí)的屏幕坐標(biāo)(手勢(shì)第一個(gè)坐標(biāo))
- y0
- dx 觸摸開始累積的橫向路程
- dy
- vx 當(dāng)前的橫向移動(dòng)速度
- vy
- numberActiveTouches 觸摸點(diǎn)數(shù)量
事件生命周期
單點(diǎn)事件
- onStartShouldSetResponderCapture 在開始觸摸時(shí)的捕獲期旦签,返回是否愿意成為響應(yīng)者,如果是true着绷,調(diào)過下一步谋旦,如果是false褐桌,繼續(xù)執(zhí)行下一步照雁。
- onStartShouldSetResponder 在用戶開始觸摸的時(shí)候(手指剛剛接觸屏幕的瞬間)秋泄,返回是否愿意成為響應(yīng)者
- onPanResponderGrant 監(jiān)視器發(fā)出通知開始工作
- onPanResponderStart 觸摸事件正式被監(jiān)視
- onPanResponderEnd 觸摸事件結(jié)束
- onPanResponderRelease 監(jiān)視器被釋放
移動(dòng)事件
- onMoveShouldSetResponderCapture 在捕獲期確定是否捕獲移動(dòng)事件
- onMoveShouldSetPanResponder 確定是否處理移動(dòng)事件
- onPanResponderGrant 監(jiān)視器發(fā)出通知開始工作
- onPanResponderMove 當(dāng)觸摸移動(dòng)調(diào)用
異常事件
- onPanResponderReject 監(jiān)視某個(gè)區(qū)域被拒絕
- onPanResponderTerminationRequest 監(jiān)視器被要求終止阱持,返回false表示不同意終止夭拌,或者不處理
- onPanResponderTermination 被異常終止,例如電話或者另一個(gè)組件成為新的響應(yīng)者