React Native如何消除启动时白屏的方法


Posted in Javascript onAugust 08, 2017

在RN 项目启动之后有一个短暂的白屏,调试阶段白屏的时间较长,大概3-5秒,打正式包后这个白屏时间会大大缩短,大多时候都是一闪而过,所以称之为“闪白”。

React Native如何消除启动时白屏的方法

React Native如何消除启动时白屏的方法

其实解决的方案也有很多,这里做一个简单的总结。

白屏的原因

在iOS App 中有 启动图(LaunchImage),启动图结束后才会出现上述的闪白,这个过程是 js 解释的过程,JS 解释完毕之前没有内容,所以才表现出白屏,那么解决的方法就是在启动图结束后,JS 解释完成前做一些简单的处理。

解决的常见方案:

  • 启动图结束后通过原生代码加载一张全屏占位图片,跟启动图一样的图片,混淆视听“欺骗用户”。
  • JS解释完毕后通知原生可以移除占位图
  • 收到 JS 发来的可以移除占位图的通知,移除占位图

代码实现

新建一个SplashScreen 文件用来接收 JS 发来的”移除占位图”的消息。相关代码如下:

SplashScreen.h

#import <Foundation/Foundation.h>
 #import "RCTBridgeModule.h"
 @interface SplashScreen : NSObject<RCTBridgeModule>

 @end

SplashScreen.m

#import "SplashScreen.h"
 @implementation SplashScreen

 RCT_EXPORT_MODULE();

 RCT_EXPORT_METHOD(close){
  [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification_CLOSE_SPLASH_SCREEN" object:nil];
 }
 @end

在AppDelegate.m 加入以下代码:

@interface AppDelegate ()
 {
  UIImageView *splashImage;
 }
 @end

 @implementation AppDelegate

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(closeSplashImage) name:"Notification_CLOSE_SPLASH_SCREEN" object:nil];

   ...
   [self autoSplashScreen];//写在 return YES 之前,其他代码之后
   return YES;
 }
 -(void)autoSplashScreen {
  if (!splashImage) {
   splashImage = [[UIImageView alloc]initWithFrame:[UIScreen mainScreen].bounds];
  }
  if (IPHONESCREEN3p5) {
   [splashImage setImage:[UIImage imageNamed:@"launch4"]];
  }else if (IPHONESCREEN4){
   [splashImage setImage:[UIImage imageNamed:@"launch5"]];
  }else if (IPHONESCREEN4p7){
   [splashImage setImage:[UIImage imageNamed:@"launch6"]];
  }else if (IPHONESCREEN5p5){
   [splashImage setImage:[UIImage imageNamed:@"launch7"]];
  }
  [self.window addSubview:splashImage];
 }
 -(void)closeSplashImage {
    dispatch_sync(dispatch_get_main_queue(), ^{
     [UIView animateWithDuration:0.5 animations:^{
      splashImage.alpha = 0;
     } completion:^(BOOL finished){
      [splashImage removeFromSuperview];
     }];
    });
 }

在合适的时机选择移除占位图。js端代码:

if (Platform.OS === 'ios') {
   NativeModules.SplashScreen.close();
 };

 更加详细的信息可以访问:https://github.com/crazycodeboy/react-native-splash-screen/blob/master/README.zh.md

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS 访问容器对象
Oct 07 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
Jun 02 Javascript
利用jQuery实现可输入搜索文字的下拉框
Oct 23 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
Feb 19 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 Javascript
react.js使用webpack搭配环境的入门教程
Aug 14 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
2种在vue项目中使用百度地图的简单方法
Sep 28 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
Jun 19 jQuery
JS localStorage存储对象,sessionStorage存储数组对象操作示例
Feb 15 Javascript
JS定时器如何实现提交成功提示功能
Jun 12 Javascript
JavaScript实现网页计算器功能
Oct 29 Javascript
react native带索引的城市列表组件的实例代码
Aug 08 #Javascript
React Native仿美团下拉菜单的实例代码
Aug 08 #Javascript
React-Native 组件之 Modal的使用详解
Aug 08 #Javascript
基于jQuery对象和DOM对象和字符串之间的转化实例
Aug 08 #jQuery
超级简易的JS计算器实例讲解(实现加减乘除)
Aug 08 #Javascript
浅谈ES6新增的数组方法和对象
Aug 08 #Javascript
Angularjs上传文件组件flowjs功能
Aug 07 #Javascript
You might like
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
php 多文件上传的实现实例
2016/10/23 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
JS 有名函数表达式全面解析
2010/03/19 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
JS实现搜索关键词的智能提示功能
2017/07/07 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
Angular2整合其他插件的方法
2018/01/20 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
Python中enumerate函数代码解析
2017/10/31 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python 判断网络连通的实现方法
2018/04/22 Python
python生成ppt的方法
2018/06/07 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
python操作kafka实践的示例代码
2019/06/19 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
python中如何使用insert函数
2020/01/09 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
微型企业创业投资计划书
2014/01/10 职场文书
学生宿舍管理制度
2014/01/30 职场文书
顶碗少年教学反思
2014/02/21 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
机关作风建设心得体会
2014/10/22 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python