简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话很少说,接下来你看到内容,讲所有来与官网css
我猜去所有机翻+我的修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981html
【以前我写过一些列关于expo和rn入门配置的东i西,你们能够点击这里查看:从零学习rn开发】react
相关文章:git
Expo大做战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用github
Expo大做战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题web
Expo大做战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等json
Expo大做战(四)--快速用expo构建一个app,expo中的关键术语react-native
Expo大做战(五)--expo中app.json 文件的配置信息api
Expo大做战(六)--expo开发模式,expo中exp命令行工具,expo中如何查看日志log,expo中的调试方式微信
Expo大做战(七)--expo如何使用Genymotion模拟器
Expo大做战(八)--expo中的publish以及expo中的link,对link这块东西没有详细看,你们能够来和我交流
写在二十三章之后的话,以前的翻译,无论如何,好与很差,终究是告一段落,也把expo基础理论的东西又深刻的理解了一遍,后续expo大做战系列将主要介绍expo sdk的api。
GLView
Expo.GLView()
一个充当OpenGL ES渲染目标的视图。在安装时,会建立一个OpenGL ES上下文。其绘图缓冲区显示为每一个框架的查看内容。除布局和触摸处理的常规视图支持外,还有如下支持的道具:
onContextCreate建立OpenGL ES上下文时将调用的函数。该函数传递一个具备WebGLRenderingContext接口的参数gl。
msaaSamples GLView能够启用iOS的内置多重采样。此道具指定要使用的样本数。默认状况下这是4.将此设置为0会关闭多重采样。在Android上,这被忽略。
高级API(High-level APIs)
因为WebGL API至关低级,所以使用底层的GLView渲染更高级的图形API会颇有帮助。如下库集成了经常使用的图形API:
- expo-three for three.js
- 用于processing.js的expo处理
任何指望WebGLRenderingContext的WebGL支持库均可以使用。有些时候,这样的库会假设一个Web JavaScript上下文(例如假设文档)。一般这是为了资源加载或事件处理,主渲染逻辑仍然只使用纯WebGL。因此这些库一般仍然可使用两种解决方法。上述世expo特定的集成包括一些流行类库的解决方法。
WebGL API
一旦组件被挂载并建立了OpenGL ES上下文,经过onContextCreate prop接收到的gl对象就成为OpenGL ES上下文的接口,从而提供WebGL API。它相似于WebGL 1规范中的WebGLRenderingContext。还有一个gl.endFrameEXP()方法,通知上下文当前帧已准备好呈现。这与其余OpenGL平台中的“交换缓冲区”API调用相似。
如下WebGLRenderContext方法当前未实现:
- getFramebufferAttachmentParameter()
- getRenderbufferParameter()
- compressedTexImage2D()
- compressedTexSubImage2D()
- getTexParameter()
- getUniform()
- getVertexAttrib()
- getVertexAttribOffset()
texImage2D()的像素参数必须为null,带有像素数据的ArrayBuffer或形式为{localUri}的对象,其中localUri是设备文件系统中图像的file:// URI。所以一个Expo.Asset对象可使用一次.downloadAsync()已经被调用(并完成)来获取资源。
出于效率缘由,方法的当前实现不会对它们的参数执行类型或边界检查。因此,传递无效参数可能会致使本机崩溃。咱们计划更新API以在即将推出的SDK版本中执行参数检查。目前错误检查的优先级很低,由于引擎一般不依赖于OpenGL API来执行参数检查,不然,经过底层OpenGL ES实现执行的检查一般就足够了。
GestureHandler
用于处理复杂手势的API。 从该项目的自述文件:
该库提供了一个API,能够提供移动平台特定的触摸和手势处理和识别的本机功能。 它容许定义在本地线程中100%运行的复杂手势处理和识别逻辑,所以具备肯定性。
该API目前在DangerZone命名空间下可用,由于它基于快速改进的react-native-gesture-handler。 咱们建议查看项目的GitHub存储库上的README文档和用法示例。 在Expo或ExpoKit中使用此API不须要本机设置(No native setup is required for using this API within Expo or ExpoKit)。
Font
容许从Web加载字体并在React Native组件中使用它们。 请参阅使用自定义字体指南中的更多详细使用信息。
用法
Expo.Font.loadAsync(object)
Expo.Font.loadAsync()一次加载多个字体的便捷形式。参数
map(object) - 一个名字的映射,须要在Expo.Font.loadAsync()中声明。例
Expo.Font.loadAsync({ Montserrat: require('./assets/fonts/Montserrat.ttf'), 'Montserrat-SemiBold': require('./assets/fontsMontserrat-SemiBold.ttf'), });返回
不返回任何内容,只是等待全部字体可用。
指纹(Fingerprint)
使用TouchID(iOS)或指纹API(Android)经过指纹扫描对用户进行身份验证。
Expo.Fingerprint.hasHardwareAsync()
肯定指纹扫描仪在设备上是否可用。返回
指示指纹扫描仪在此设备上是否可用的布尔值。Expo.Fingerprint.isEnrolledAsync()
肯定设备是否保存了用于身份验证的指纹。返回
一个布尔值,指示设备是否保存了用于身份验证的指纹。Expo.Fingerprint.authenticateAsync()
尝试经过指纹进行身份验证。 Android - 在Android上使用指纹模块时,您须要提供UI组件来提示用户扫描指纹,由于操做系统没有默认警报。参数
(仅适用于iOS)promptMessage(string)与TouchID提示符一块儿显示的消息。返回
包含成功的对象,指示验证是否成功的布尔值以及在验证失败的状况下包含错误代码的错误。Expo.Fingerprint.cancelAuthenticate() - (仅限Android)
取消指纹认证流程。DeviceMotion
访问设备运动和方向传感器。全部的数据都是经过一个设备运行的三个轴来表示的。根据纵向:X从左到右,Y从下到上,Z从后到前垂直穿过屏幕。
Expo.DangerZone.DeviceMotion.addListener(listener)
订阅DeviceMotion更新。参数
listener (function) - 当DeviceMotion更新可用时调用的回调。当被调用时,监听器被提供一个参数,它是一个包含如下字段的对象:
- acceleration (object) 加速度(对象) - 三轴上的设备加速度,做为具备x,y,z键的对象。用m / s2表示。
- accelerationIncludingGravity (object) - 设备加速时,三轴上的重力做为具备x,y,z键的对象。用m / s2表示。
- rotation (object) - 设备在空间中的方向,做为具备alpha,beta,gamma键的对象,其中alpha用于围绕Z轴旋转,beta用于X轴旋转,gamma用于Y轴旋转。
- rotationRate(object) - 设备围绕其每一个轴的旋转速率,做为具备alpha,beta,gamma键的对象,其中alpha围绕Z轴,beta围绕X轴,gamma围绕Y轴。
- orientation (number) - 基于屏幕旋转的设备方向。值为0(人像),90(右侧风景),180(上下颠倒),-90(左侧风景)。
返回
一个EventSubscription对象,当您想要取消订阅侦听器时,您能够调用remove()。Expo.DangerZone.DeviceMotion.removeAllListeners()
删除全部听众。Expo.DangerZone.DeviceMotion.setUpdateInterval(intervalMs)
订阅DeviceMotion更新。
参数
intervalMs(number)DeviceMotion更新之间的指望时间间隔(以毫秒为单位)
亮度(Brightness)
获取和设置屏幕亮度的API。Expo.Brightness.setBrightnessAsync(brightnessValue)
设置屏幕亮度。
参数
brightnessValue(number) - 介于0和1之间的数字,表示所需的屏幕亮度。Expo.Brightness.getBrightnessAsync()
获取屏幕亮度。
返回
用0和1之间的数字解析的Promise,表明当前的屏幕亮度。Expo.Brightness.setSystemBrightnessAsync(brightnessValue)
警告:此方法是实验性的。设置全局系统屏幕亮度,须要Android上的WRITE_SETTINGS权限。
参数
brightnessValue(number) - 介于0和1之间的数字,表示所需的屏幕亮度。例
await Permissions.askAsync(Permissions.SYSTEM_BRIGHTNESS); const { status } = await Permissions.getAsync(Permissions.SYSTEM_BRIGHTNESS); if (status === 'granted') { Expo.Brightness.setSystemBrightnessAsync(1); } ...
Expo.Brightness.getSystemBrightnessAsync()
警告:此方法是实验性的。获取全局系统屏幕亮度。
返回
用0和1之间的数字解析的Promise,表示当前系统屏幕亮度。
下一张继续介绍,这一篇主要介绍了:expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness!,欢迎你们关注个人微信公众号,这篇文章是否被你们承认,个人衡量标准就是公众号粉丝增加人数。欢迎你们转载,但必须保留本人博客连接!