React Native (экспо-экранная ориентация): невозможно прослушивать изменение ориентации в iOSIOS

Программируем под IOS
Ответить
Anonymous
 React Native (экспо-экранная ориентация): невозможно прослушивать изменение ориентации в iOS

Сообщение Anonymous »

Моя проблема
Я не могу активировать ScreenOrientation.addOrientationChangeListener на моих устройствах iOS. Он отлично работает на Android.
Как решить этот вопрос
Приведенный ниже пример — моя лучшая попытка продемонстрировать мою проблему. Если бы кто-нибудь мог помочь мне запустить ориентациюListener() в этом коде, используя устройство iOS, это решило бы мою проблему.
Любые советы или предложения, где искать, очень ценятся :)
Любые советы или предложения, где искать, очень признательны :)
p>
Gif, отображающий мою проблему
Изображение

Подробнее о моей проблеме
У меня есть useEffect(), где я реализую ScreenOrientation.addOrientationChangeListener(). При срабатывании он должен вызвать ориентациюListener(). Это работает в Android, но не в iOS.
Что работает на моей iOS, так это то, что если я закомментирую свой useEffect, у меня появится кнопка, которая использует ScreenOrientation.getOrientationAsync() для заполнения моей ориентации. Я могу изменить ориентацию своего устройства, нажав эту кнопку, и получу правильную ориентацию на своих устройствах iOS и Android. Я не уверен, о чем именно это мне говорит, но вселяет в меня оптимизм по поводу решения моей проблемы со слушателем.
Мои исследования
Я нашел этот пост (https://stackoverflow.com/a/76683420/11925053) и соответствующую проблему GitHub с использованием ScreenOrientation.unlockAsync() , но это также не принесло успеха. с моей стороны. Я пробовал различные варианты размещения этого в моем useEffect или запуска с помощью кнопки. Я также пробовал варианты изменения моего app.json, чтобы начать с позиции или по умолчанию.
Код
import React, { useEffect, useState } from "react";
import { StyleSheet, Text, View, TouchableOpacity } from "react-native";
import * as ScreenOrientation from "expo-screen-orientation";

export default function Orientation06() {
const [orientation, setOrientation] = useState("Unknown");

useEffect(() => {
const startListeningToOrientation = async () => {
await ScreenOrientation.addOrientationChangeListener(orientationListener);
console.log("in listeningToOrientation");
};

startListeningToOrientation();
});

const checkOrientation = async () => {
console.log("in checkOrientation");
const orientation = await ScreenOrientation.getOrientationAsync();
setOrientation(orientation);
console.log(`orientation is ${orientation}`);
};

const orientationListener = (o) => {
console.log("in orientationListener 🔔");
setOrientation(o.orientationInfo.orientation);
};

return (

Current Orientation:
{orientation}
checkOrientation()}
>
Check orientation


);
}

const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#f5f5f5",
},
text: {
fontSize: 24,
fontWeight: "bold",
},
orientation: {
fontSize: 32,
marginTop: 20,
color: "#007AFF",
},
touchOpNav: {
backgroundColor: "black",
padding: 5,
width: 250,
borderRadius: 12,
marginBottom: 1,
},
txtTouchOpNav: {
color: "gray",
alignSelf: "center",
fontSize: 20,
},
});


app.json
{
"expo": {
"name": "native-stuff-reducer-array",
"slug": "native-stuff-reducer-array",
"version": "1.0.0",
"orientation": "default",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"newArchEnabled": true,
"splash": {
"image": "./assets/splash-icon.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"ios": {
"supportsTablet": true
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#ffffff"
}
},
"web": {
"favicon": "./assets/favicon.png"
},
"plugins": [
"expo-video",
[
"expo-screen-orientation",
{
"initialOrientation": "DEFAULT"
}
]
]
}
}



Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-change
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»