![](/img/trans.png)
[英]undefined is not an object (evaluating 'this.panResponder.panHandlers')
[英]Parameter to panHandlers to handle multiple PanResponder?
假设我有两个简单的动画视图。 我想知道哪个View
被平移了。 如何将任何参数传递给它或任何其他检测方式? 谢谢
<Animated.View {...this._panResponder.panHandlers}></Animated.View>
<Animated.View {...this._panResponder.panHandlers}></Animated.View>
在您的PanResponder
实现中,检查target
属性并使用findNodeHandle
找出它引用的组件,例如
import { findNodeHandle } from 'react-native'
...
constructor (props) {
super (props)
// initialize array for refs
this.animatedViewRefs = []
this.panResponder = PanResponder.create({
...
onStartShouldSetPanResponderCapture: ({ nativeEvent: { target } }, _) => {
const component = this.findComponentByTarget(target)
// now `component` will either be null or a reference to your animated view
}
...
})
}
// helper method for finding component
findComponentByTarget (target) {
for (const ref of this.animatedViewRefs) {
if (target === findNodeHandle(ref)) {
return ref
}
}
return null
}
在您的渲染方法中,您将拥有
<Animated.View
ref={ref => (this.animatedViewRefs[0] = ref)}
{...this.panResponder.panHandlers} />
<Animated.View
ref={ref => (this.animatedViewRefs[1] = ref)}
{...this.panResponder.panHandlers} />
...
<Animated.View
ref={ref => (this.animatedViewRefs[n] = ref)}
{...this.panResponder.panHandlers} />
//passing parameters
<Animated.View {...this._PanResponder('pass parameter here 1').panHandlers}></Animated.View>
<Animated.View {...this._PanResponder('pass parameter here 2').panHandlers}></Animated.View>
//handler
panResponder = (receive parameter here) =>
PanResponder.create({
//code here
.
.
.
})
我尚未对此进行测试,但我认为您应该能够为类似于以下示例的每个视图创建不同的响应程序。
this._firstPanResponder = PanResponder.create({
onPanResponderGrant: (evt, gestureState) => {
// Do something when the first responder is granted
this.doFirst();
},
});
this._secondPanResponder = PanResponder.create({
onPanResponderGrant: (evt, gestureState) => {
// Do something when the second responder is granted
this.doSecond();
},
});
然后视图应该看起来像这样。
<Animated.View {...this._firstPanResponder.panHandlers}></Animated.View>
<Animated.View {...this._secondPanResponder.panHandlers}></Animated.View>
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.