Пропуск сенсорных событий через оверлей

Настроить

У меня есть 2 экрана, давайте назовем их A и B.

Экран A показывает изображение с камеры, записанное задней камерой телефона (сторонняя библиотека, к которой у меня нет дальнейшего доступа). Экран B имеет полупрозрачный фон и некоторые элементы пользовательского интерфейса (например, кнопки)

введите описание изображения здесь

задача

Я не могу добавить элементы пользовательского интерфейса непосредственно на экран A (третье лицо), поэтому я использую реагирующую навигацию V2 для наложения экрана B с помощью Navigation.showOverlay в верхней части экрана A.

проблема

Оба экрана должны реагировать на сенсорные события, но кажется, что наложение экрана B блокирует эти события на экране A.

введите описание изображения здесь

Вопрос

Возможно ли как-то передать все сенсорные события с экрана B (пользовательский интерфейс с наложением) на экран A (экран камеры, который также должен реагировать на сенсорные события), чтобы оба экрана могли реагировать на ввод пользователя?


В случае, если кто-то заинтересован в стороннем компоненте, я имею в виду: https://github.com/brave-digital/react-native-wikitude/issues/10

0 ответов

Вместо использования response-native-navigation showOverlay, use можно использовать

<View style={{flex: 1}}>
  <ScreenA />
  <View style={{position: "absolute", height: screenHeight, width: screenWidth}} pointerEvents={'box-none'}>
    <ScreenB />
  </View>
</View>

При отображении наложения "Навигация" вы можете использовать его параметры для управления перехватом касания. Попробуйте настроить его так, и обратите внимание на interceptTouchOutside опция наложения:

Navigation.showOverlay({
  component: {
    id: 'myComponent',
    name: 'myComponent',
    passProps,
    options: {
      layout: {
        backgroundColor: 'transparent',
        componentBackgroundColor: 'transparent'
      },
      overlay: {
        interceptTouchOutside: false
      }
    }
  }
});

Если вы отображаете полноэкранный режим, вам также может потребоваться установить его верхний вид. pointerEvents опора (на myComponent в приведенном выше примере).

Возможно, вы могли бы использовать кнопку / сенсорную непрозрачность, чтобы открыть экран камеры, используя функцию (чтобы сфокусировать ее...). Таким образом, оба экрана могут принимать пользовательские данные.

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

Приведенный ниже код является примером кода, который можно поместить в такую ​​непрозрачную кнопку или сенсорную кнопку на экране пользовательского интерфейса.

например <Button onPress = { this.fnOpenCamera } title = 'Camera View'/>

fnOpenCamera = () =>
 {
    this.props.navigation.navigate('ScreenA');

 }

Попробуйте prop pointerEvents='box-none' или обратитесь к этой проблеме