2

ドラッグ アンド ドロップ モードで、panResponder が画面上でコンポーネントを移動できるようにしようとしています。longPressただし、このドラッグ アンド ドロップは、そのような要素で開始する必要があります。

longPressイベントをキャプチャするため、panResponder有効onStartShouldSetPanResponder => this.state.panEnabledになったらもう一度押す必要があります。

ネイティブ イベントを発生させたい、またはもう一度押さずにドラッグを有効にしたい。ネイティブ イベントを再発行することはできますか? 何らかの方法で panResponder に渡すことはできますか?

ありがとう!

4

1 に答える 1

0

私はこれを使用せずに(ただしと同じ効果)longTouchを使用するだけで機能させました。見てください:panResponderlongTouch

import React, { Component } from 'react';

import {
    View,
    PanResponder
} from 'react-native';

const LONGPRESS_TIMER = 300;

class DraggableComponent extends Component {
    constructor() {
        super();

        this.timer = null;

        this.state = {
            canMove: false
        }

       this._panResponder = this.setUpPanResponder();

   }
   setUpPanResponder() {

       const self = this;

       return PanResponder.create({
           onStartShouldSetPanResponder: (evt, gestureState) => true,
           onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
           onMoveShouldSetPanResponder: (evt, gestureState) => true,
           onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
           onPanResponderGrant: (evt, gestureState) => {

               self.timer = setTimeout(() => {
                   self.setState({canMove: true});
               }, LONGPRESS_TIMER);

           },
           onPanResponderMove: (evt, gestureState) => {

               if(this.state.canMove) {
                   console.log('moving', gestureState); 
                   // code to move view here
               }

           },
           onPanResponderTerminationRequest: (evt, gestureState) => true,
           onPanResponderRelease: (evt, gestureState) => {

               clearTimeout(self.timer); 
               self.setState({canMove: false});

           }
       });
   }
   render() {

       return <View 
           style={{
               width: 100, 
               height: 100, 
               backgroundColor: this.state.canMove ? 'green' : 'blue'}} 
               {...this._panResponder.panHandlers} />

   }

}

LONGPRESS_TIMERconstを変更することで、「canMove」状態をトリガーするのにかかる時間を調整できます。

于 2016-08-04T13:51:52.047 に答える