覆盖在React Native Swiper上向左滑动

时间:2019-04-17 18:53:19

标签: ios react-native swipe expo

我目前在项目中将react-native-swiper与Expo一起使用,但是无法覆盖左滑动行为以提供自定义过渡。

我的用例: 用户可以向上滑动以观看更多视频。如果他们喜欢视频,则可以向左滑动以查看有关视频中特色产品的更多详细信息。

我目前已经在我的return函数中使用react-native-swiper实现了垂直滑动。视频幻灯片组件只是在视图中呈现Expo视频组件。

我的问题是确定一种清除左滑动时Swiper行为的干净方法,以便向其传递导航操作。我已经尝试在react-native-swiper上使用可用的方法,例如onTouchStartCapture和onTouchEnd,并设法使滑动行为起作用(例如,请参见返回内容下面的代码段),但是动画不存在,而且很漂亮很有道理。

如果可能的话,对我来说,使用react-native-swiper实现向左滑动功能的最佳方法是什么?

this.props.products.productFinish ? ( //Boolean represents whether API has fetched product objects from backend
      <View style={styles.defaultView}>
        <Swiper
          loadMinimal
          loadMinimalSize={2}
          showsPagination={false}
          style={styles.wrapper}
          loop={false}
          horizontal={false} //Enables vertical scrolling
        >
          {this.props.products.listAll.map((product, i) => (
            <VideoSlide
              product={product}
              categories={this.props.categories}
              setSelectedCategory={category =>
                this.props.setSelectedCategory(category)
              }
              i={i}
              key={i}
              navigation={this.props.navigation}
              onViewProductScreen={item => {
                navigate("Detail", item);
              }}
            />
          ))}
        </Swiper>
      </View>
    ) : (
      <View style={styles.activityIndicatorView}>
        <ActivityIndicator
          size="large"
        />
      </View>
    );

快速刷卡检测

<Swiper
          containerStyle={{width}}
          showsPagination={false}
          style={styles.wrapper}
          showsButtons={false}
          loop={false}
          horizontal={true}
          onTouchStart={(e) => {
            this.setState({
              touchStartX: e.nativeEvent.locationX,
              beingTouched: true
            });
          }}
          onTouchEnd={(e, state, context) => {
            let diff =
              Math.floor(this.state.touchStartX) - e.nativeEvent.locationX;
            console.log("diff", diff);
            if (diff > 150) {
              console.log("swipe");
              BlockTimer.execute(() => {
                this.props.onViewProductScreen({ product });
              }, 500);
            }
          }}
        >
 <Video
              source={{ uri: firstVideoUri }}
              rate={1.0}
              volume={1.0}
              // isMuted={false}
              resizeMode="fit"
              shouldPlay={this.state.shouldPlay}
              isLooping
              style={{ width: width, height: height - 100 }}
            />
</Swiper>

0 个答案:

没有答案