5

我使用 PanGestureHandler 和 ScrollView 编写了一个菜单。

问题是; 当 PanGestureHandler 处于活动状态时,ScrollView 的滚动不起作用。

我的意思是滑动功能正在工作,但滚动不起作用。

我的期望是同时使用这两个功能。

我在下面分享了我的实现代码。

任何想法?_

构造函数


    constructor(props) {
        super(props);
        this.state = {
            enable: true,
        };


        const dragX = new Value(0);
        const dragY = new Value(0);
        const state = new Value(-1);

        const offsetY = new Value(0);

        this.gestureHandler = event([
            {
                nativeEvent: {
                    translationX: dragX,
                    translationY: dragY,
                    offsetY,
                    state
                }
            }
        ]);

        this.transitionX = block([
            cond(
                eq(state, State.ACTIVE),
                [

                    interpolate(dragX, {
                        inputRange: [MIN_SWIPE_X, MAX_SWIPE_X],
                        outputRange: [MIN_SWIPE_X, MAX_SWIPE_X],
                        extrapolate: "clamp"
                    }),
                ],
                [

                    cond(
                        eq(state, State.END),
                        [
                            call([], () => { this.setState({ enable: true }) }),
                            0,
                        ],
                        cond(
                            eq(state, State.CANCELLED),
                            0,
                            dragX
                        )
                    )

                ]
            )
        ]);

    }

使成为


    render() {
        const { navigation } = this.props;

        return (
            <View style={{ flex: 1 }} >


                <ScrollView
                    ref={this.scrollRef}
                    waitFor={this.state.enable ? this.ref : this.scrollRef}
                    scrollEventThrottle={40}
                    onScrollEndDrag={() => { this.setState({ enable: true }) }}
                    onScrollBeginDrag={() => { this.setState({ enable: false }) }}
                >

                    <PanGestureHandler
                        enabled={this.state.enable}
                        ref={this.ref}
                        onGestureEvent={this.gestureHandler}
                        onHandlerStateChange={this.gestureHandler}>

                        <Animated.View
                            style={{
                                transform: [
                                    {
                                        translateX: this.transitionX,
                                    },
                                ]
                            }} >

                            {
                                ...
                            }
                        </Animated.View>


                    </PanGestureHandler>
                </ScrollView>
            </View>
        );
    }

4

0 回答 0