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

 

簡要:本系列文章講會對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:

任何指望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歡迎你們關注個人微信公衆號,這篇文章是否被你們承認,個人衡量標準就是公衆號粉絲增加人數。歡迎你們轉載,但必須保留本人博客連接!

 

相關文章
相關標籤/搜索