Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
React Native-panResponder动画在iOS上不工作_Ios_Reactjs_React Native_Drag And Drop_Draggable - Fatal编程技术网

React Native-panResponder动画在iOS上不工作

React Native-panResponder动画在iOS上不工作,ios,reactjs,react-native,drag-and-drop,draggable,Ios,Reactjs,React Native,Drag And Drop,Draggable,我使用panResponder在我的应用程序中创建可拖动的视图。它在android上运行良好,但在iOS上,拖动动画在移动la一点后停止 这是我的密码: export default class Draggable extends React.Component { constructor(props) { super(props); const { pressDragRelease, pressDragStart, reverse, initPosition } = props;

我使用panResponder在我的应用程序中创建可拖动的视图。它在android上运行良好,但在iOS上,拖动动画在移动la一点后停止

这是我的密码:

export default class Draggable extends React.Component {

constructor(props) {
  super(props);

  const { pressDragRelease, pressDragStart, reverse, initPosition } = props;

this.state = {
  pan: new Animated.ValueXY({
    x: initPosition.dragX,
    y: initPosition.dragY
  }),
  _value: { x: initPosition.dragX, y: initPosition.dragY }
};

this.panResponder = PanResponder.create({
  onStartShouldSetPanResponder: (evt, gestureState) => true,
  onStartShouldSetPanResponderCapture: (evt, gestureState) => true,
  onMoveShouldSetPanResponder: (evt, gestureState) => true,
  onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,
  onPanResponderGrant: (gesture) => {
    console.log("inside panResponder grant");
    if (reverse === false) {
      this.state.pan.setOffset({x: this.state._value.x,y: this.state._value.y});
      this.state.pan.setValue({ x: 0, y: 0 });
    } else {
      this.state.pan.setValue({ x: gesture.dx, y: gesture.dy });
    }
  },
  onPanResponderMove: Animated.event([
      null,
      {
        dx: this.state.pan.x,
        dy: this.state.pan.y
      }
    ]),
    //Called on android at the end
    onPanResponderRelease: () => {
      if (pressDragRelease) {
        pressDragRelease({ x: this.state._value.x, y: this.state._value.y });
      }

    if (reverse === false) this.state.pan.flattenOffset();
    else this.reversePosition();

  },
  //Called on ios at the end
  onPanResponderTerminate: () => {

    if (pressDragRelease) {
      pressDragRelease({ x: this.state._value.x, y: this.state._value.y 
   });
    }

    if(reverse === false) {
      this.state.pan.flattenOffset();
    } else {
      this.reversePosition();
    }

  }
});
}

componentWillMount() {
 if (this.props.reverse === false)
   this.state.pan.addListener(c => this.setState({ _value: c }));
}

componentWillUnmount() {
  this.state.pan.removeAllListeners();
}

reversePosition = () => {
  const { initPosition } = this.props;
  Animated.spring(this.state.pan, {
    toValue: { x: initPosition.dragX, y: initPosition.dragY }
  }).start();
};

render() {
  return (
    <Animated.View
      {...this.panResponder.panHandlers}
      style={[this.state.pan.getLayout()]}
    >
      {this.props.children}
    </Animated.View>
   );
  }
}
导出默认类Draggable.Component{
建造师(道具){
超级(道具);
const{pressDragRelease,pressDragStart,reverse,initPosition}=props;
此.state={
平移:新的动画.ValueXY({
x:initPosition.dragX,
y:initPosition.dragY
}),
_值:{x:initPosition.dragX,y:initPosition.dragY}
};
this.panResponder=panResponder.create({
onStartShouldSetPanResponder:(evt,手势状态)=>真,
onStartShouldSetPanResponderCapture:(evt,手势状态)=>真,
onMoveShouldSetPanResponder:(evt,手势状态)=>真,
onMoveShouldSetPanResponderCapture:(evt,手势状态)=>真,
onPanResponderGrant:(手势)=>{
log(“内部panResponder授权”);
如果(反向===false){
this.state.pan.setOffset({x:this.state.\u value.x,y:this.state.\u value.y});
this.state.pan.setValue({x:0,y:0});
}否则{
this.state.pan.setValue({x:sirpose.dx,y:sirpose.dy});
}
},
onPanResponderMove:Animated.event([
无效的
{
dx:这个州,泛x,
戴:这个。州。潘。y
}
]),
//最后在安卓上打电话
onPanResponderRelease:()=>{
如果(按DragRelease){
按DragRelease({x:this.state.\u value.x,y:this.state.\u value.y});
}
if(reverse==false)this.state.pan.flattOffset();
否则,这个。反转位置();
},
//最后在ios上打电话
onPanResponderTerminate:()=>{
如果(按DragRelease){
按DragRelease({x:this.state.\u value.x,y:this.state.\u value.y
});
}
如果(反向===false){
this.state.pan.flattOffset();
}否则{
这个。反转位置();
}
}
});
}
组件willmount(){
if(this.props.reverse===false)
this.state.pan.addListener(c=>this.setState({u值:c}));
}
组件将卸载(){
this.state.pan.removeAllListeners();
}
反转=()=>{
const{initPosition}=this.props;
动画.spring(this.state.pan{
toValue:{x:initPosition.dragX,y:initPosition.dragY}
}).start();
};
render(){
返回(
{this.props.children}
);
}
}
我正在使用: “反应本机”:“0.57.7”

我尝试了很多与panResponder相关的东西,因为它在android I guest上运行良好。这是处理程序的问题还是onPanResponderMove处理程序中的动画事件的问题


感谢您的帮助,我已经为此奋斗了好几天了!:)

你是否已经使用了轻松、轻松、线性的动画计时?我只是尝试了一些带有“动画、计时”的动画,效果很好。你是否已经使用轻松、轻松、线性的动画计时?我只是尝试了一些带有“动画、计时”的动画,效果很好。