1. 程式人生 > >Expo大作戰(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

Expo大作戰(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

ring 調試 bubuko 存儲 touchid 調用 .json api ext

技術分享圖片

簡要:本系列文章講會對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歡迎大家關註我的微信公眾號,這篇文章是否被大家認可,我的衡量標準就是公眾號粉絲增長人數。歡迎大家轉載,但必須保留本人博客鏈接!

技術分享圖片

Expo大作戰(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness