Я не могу активировать 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,
},
});
Код: Выделить всё
{
"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"
}
]
]
}
}
Я добавил проблему на Expo Github здесь: https://github.com/expo/ выставка/вопросы/33853
Подробнее здесь: https://stackoverflow.com/questions/793 ... ion-change
Мобильная версия