Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.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
Javascript 反应本机:Panresponder在保留触摸的同时从触控突出显示切换到Panresponder_Javascript_Reactjs_React Native_Mobile_Expo - Fatal编程技术网

Javascript 反应本机:Panresponder在保留触摸的同时从触控突出显示切换到Panresponder

Javascript 反应本机:Panresponder在保留触摸的同时从触控突出显示切换到Panresponder,javascript,reactjs,react-native,mobile,expo,Javascript,Reactjs,React Native,Mobile,Expo,我目前在react native中有一个主组件,它根据应用程序状态呈现两个视图组件中的一个。第一个是TouchableOpacity气泡,而第二个在该TouchableOpacity的确切位置包含外观相同的panresponder气泡 长时间按下第一个TouchableOpacity后,第一个视图会对主父组件触发状态更新,然后(由于更新的状态),会在按住气泡的位置渲染第二个视图,即一个可拖动的panresponder 问题:在第一个视图中长时间按下气泡并渲染第二个视图后,PanResponder

我目前在react native中有一个主组件,它根据应用程序状态呈现两个视图组件中的一个。第一个是TouchableOpacity气泡,而第二个在该TouchableOpacity的确切位置包含外观相同的panresponder气泡

长时间按下第一个TouchableOpacity后,第一个视图会对主父组件触发状态更新,然后(由于更新的状态),会在按住气泡的位置渲染第二个视图,即一个可拖动的panresponder

问题:在第一个视图中长时间按下气泡并渲染第二个视图后,PanResponder无法从第一个视图拾取触摸。用户被迫将手指从屏幕上松开,然后再次按下以开始拖动panresponder。这需要在一个平稳的动作中实现。如何保留触摸事件,以便第二个视图能够从touchableopacity中检测已按下的触摸

解决方案的潜在线索我已经知道,使用两个可触摸的不透明区域,可以保留新闻!我还附上了下面这个实验的代码!长时间按下第一个组件后,第二个touchableopacity立即变为不透明,并保持这种方式直到释放(但它无法调用onLongPress函数)

谢谢

import React,{useState,useRef}来自“React”;
从“react native”导入{View,TouchableOpacity,动画,PanResponder};
导出默认函数App(){
var[status,updateStatus]=useState(true)
返回(
{身份?
{updateStatus(false);
}
}
/>
:
{updateStatus(true)}}>
}
);
}
导出函数气泡(道具){
const pan=useRef(新的动画.ValueXY())
const panResponder=React.useMoom(()=>panResponder.create({
onStartShouldSetPanResponder:(evt,手势状态)=>{
返回真值
},
onPanResponderGrant:async(evt,gestureState)=>{
pan.current.setOffset(pan.current.\uu getValue());
pan.current.setValue({x:0,y:0})
},
onPanResponderMove:(evt,手势状态)=>{
return.event([
null,{dx:pan.current.x,dy:pan.current.y}
])(evt,手势状态)
}
,
onPanResponderRelease:async(e,手势)=>{
pan.current.flattOffset();
动画。春天(泛当前{
toValue:{x:0,y:0},
摩擦:5,
}).start(()=>{
道具更新状态(错误)
}
);
}
}), []);
const panStyle={
transform:pan.current.getTranslateTransform()
}
返回(
);
}