React-собственный просмотрщик изображений с зумом и swiper

У меня есть массив изображений в Swiper, где я могу прокрутить их, и когда я нажимаю на них, он открывается на модальном (с помощью Lightbox). Но Lightbox не имеет Pinch-to-Zoom или прокрутки.

поэтому я ищу решение для этого. У меня уже есть swiper, но когда я открываю изображение, я хочу все еще иметь возможность прокручивать все изображения (так же, как Facebook, вы можете просмотреть все фотографии или открыть одну и прокрутить их). В дополнение к этому мне нужно уметь Пинч-на-зум.

сейчас это мой код:

(соответствующий код)

      <Swiper
        styles={{flex: 1}}
        height={250}
        renderPagination={this.renderPagination}
        paginationStyle={{
          bottom: -23, left: null, right: 10
        }} loop={false}>
          {this.state.imagens.map((item, index) => {
            return(
              <NetworkImage
                source={{uri: `URL/${item.Ficheiro}`, height:250, width: Dimensions.get('window').width}}>
                <Lightbox navigator={this.props.navigator}>
                  <Image
                    style={{ height: 300 }}
                    source={{ uri: `URL/${item.Ficheiro}` }}
                  />
                </Lightbox>
              </NetworkImage>
            );
          })}
      </Swiper>

Im, используя эту библиотеку для swiper https://github.com/leecade/react-native-swiper и я видел, что у него есть Фотопросмотр, но я не мог заставить его работать.

1 ответов


Я пытался реализовать что-то похожее на это.

я использую react-native-image-zoom-viewer для увеличенного режима после нажатия одной из картинок в swiper. В модальном режиме вы можете увеличивать и уменьшать изображение, проводя между изображениями.

https://www.npmjs.com/package/react-native-image-zoom-viewer

я еще не полностью реализовал решение, но, похоже, вы можете просто обернуть компонент ImageViewer в любой модальный, который вы можете открыть/закрыть его программно.

<Modal visible={this.state.isModalOpened} transparent={true}>
   <ImageViewer imageUrls={images} index={this.state.currentImageIndex}/>
</Modal>

и с модальным где-то сидит на Вашей странице, для Swiper вы можете отобразить над вашими изображениями и вернуть кликабельные изображения следующим образом:

<View style={styles.slide} key={index}>
   <TouchableWithoutFeedback onPress={() => {this.openModal(index)}}>
     <Image
       resizeMode="cover"
       style={styles.image}
       source={{ uri: img.url }}
     />
   </TouchableWithoutFeedback>
</View>

как видно выше, каждое изображение обернуто onPress, который открывает модальный в соответствии с индексом изображения, поэтому он открывает модальный ImageViewer на правой фотографии.

и openModal должен выглядеть примерно так:

function openModal(index) {
   this.setState({isModalOpened: true, currentImageIndex: index })
}

и государство должно быть:

this.state={
  isModalOpened: false,  //Controls if modal is opened or closed
  currentImageIndex: 0   //Controls initial photo to show for modal
}