简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网
我猜去全部机翻+个人修改补充+demo测试的形式,对expo进行一次大补血!欢迎加入expo兴趣学习交流群:597732981
【之前我写过一些列关于expo和rn入门配置的东i西,大家可以点击这里查看:从零学习rn开发】
相关文章:
Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用
Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题
Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等
Expo大作战(四)--快速用expo构建一个app,expo中的关键术语
Expo大作战(五)--expo中app.json 文件的配置信息
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!,欢迎大家关注我的微信公众号,这篇文章是否被大家认可,我的衡量标准就是公众号粉丝增长人数。欢迎大家转载,但必须保留本人博客链接!