Как отложить загрузку приложения в React Native? Некоторые элементы загружаются быстрее, чем другие?

#ios #reactjs #react-native #splash-screen

#iOS #reactjs #react-native #заставка

Вопрос:

Я разрабатываю приложение React Native в Expo, и у меня есть пользовательская анимация заставки, которую я запускаю изначально после AppLoading исчезновения заставки. Это работает в симуляторе — переход animate out Animated.timing — это переход от 1 к 0.

Проблема в том, что на реальном iPhone загрузка приложения прекращается на долю секунды, а за ней нет дополнительной анимированной заставки (an Animated.Image ). Однако другие элементы приложения загрузились за эту долю секунды.

Это происходит, даже если я удаляю анимацию «анимировать». Таким образом, моя логика состоит в том, чтобы отложить исчезновение загрузки приложения на 1 секунду достаточно долго, чтобы вторичный всплеск был устойчивым.

Как я могу это сделать? Что здесь происходит?

РЕДАКТИРОВАТЬ: здесь есть только упоминание о загрузке приложений:

   if (!fontsLoaded) {
    return <AppLoading />;
  } else {
 

Анимированные элементы заставки

 <Animated.Image pointerEvents={"none"} style={[styles.splash, { opacity: splashOpacity }]} source={require('./assets/splashnew.png')} />
    <Animated.Image pointerEvents={"none"} style={[styles.splashTxt, { opacity: splashOpacity, transform: [{scaleY: splashScale }, {scaleX: splashScale }]} ]} source={require('./assets/splash.png')} />
 

Управляются этой функцией:

   useEffect(() => {

    Animated.sequence([
        Animated.delay(1000),
      Animated.spring(splashScale, {
        toValue: 1,
        bounciness: 4,
        useNativeDriver: false,
        speed: 2
      })
    ]).start()

    const interval = setInterval(() => {

      Animated.sequence([

          Animated.parallel([
            Animated.spring(splashScale, {
              toValue: 0,
              bounciness: 4,
              useNativeDriver: false,
              speed: 2
            }),
            Animated.spring(splashOpacity, {
              toValue: 0,
              bounciness: 2,
              useNativeDriver: false,
              speed: 3
            }),
 

Комментарии:

1. можете ли вы показать свой App.js код? обычно это содержит код, скрывающий заставку загрузки приложения.

2. @WenW проверьте мое редактирование

Ответ №1:

все, что вам нужно сделать, это настроить другую переменную состояния и использовать ее вместо fontsLoaded .

    const [waitOneSecond, setWaitOneSecond] = useState(false);

   useEffect(()=>{
     if (fontsLoaded) setTimeOut(()=>{setWaitOneSecond(true);},1000);
   },[fontsLoaded]);


  if (!waitOneSecond) {
    return <AppLoading />;
  } else {