Expo大作戰(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading

来源:https://www.cnblogs.com/gdsblog/archive/2018/03/24/8641076.html
-Advertisement-
Play Games

Expo大作戰系列完結! 簡要:本系列文章講會對expo進行全面的介紹,本人從2017年6月份接觸expo以來,對expo的研究斷斷續續,一路走來將近10個月,廢話不多說,接下來你看到內容,講全部來與官網 我猜去全部機翻+個人修改補充+demo測試的形式,對expo進行一次大補血!歡迎加入expo興 ...


Expo大作戰系列完結! 

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


Assets

該模塊提供了expo資產體系的介面。資產是與應用程式在運行時需要的源代碼一起存在的任何文件。示例包括圖像,字體和聲音。 Expo的資產系統是與React Native的集成,以便您可以使用require('path / to / file')引用文件。例如,您可以在React Native中引用靜態圖像文件以用於Image組件。查看React Native有關靜態圖像資源的文檔以獲取更多信息。這種參考靜態圖像資源的方法expo一起開箱即用。

Expo.Asset()
這個類(class) 代表您的應用中的一項資產。它提供關於資產的元數據(例如其名稱和類型)並提供載入資產數據的工具。

  • name

沒有擴展名的資產文件的名稱。在文件名中也沒有@之後的部分(用於指定圖像的縮放因數)。

  • type

資產文件名的擴展名

  • hash

資產數據的MD5散列

  • URI

指向遠程伺服器上資產數據的URI。在運行已發佈版本的應用時,這指的是expo資產伺服器上expo存儲資產的位置。在開發期間從XDE運行應用程式時,此URI指向您的電腦上運行的XDE伺服器,並且資產直接從您的電腦提供。

  • localUri

如果資產已下載(通過調用downloadAsync()),則指向設備上包含資產數據的本地文件的file:// URI。

  • width

如果資產是圖像,圖像數據的寬度除以比例因數。比例因數是文件名後面的數字,如果不存在則為1。

  • height

如果資產是圖像,圖像數據的高度除以比例因數。比例因數是文件名後面的數字,如果不存在則為1。

  • downloadAsync()

將資產數據下載到設備的緩存目錄中的本地文件。一旦返回的承諾沒有錯誤地履行,這個資產的localUri欄位指向一個包含資產數據的本地文件。只有當資產的最新本地文件由於較早的下載而不存在時,才會下載該資產。

Expo.Asset.loadAsync(module)
為方便起見,包裝Expo.Asset.fromModule(module).downloadAsync的助手。

參數
modules(Array | number) - 一個require('path / to / file')數組。也可以只是一個沒有array的模塊。

返回
返回一個Promise,解析資產已保存到磁碟的時間。

Expo.Asset.fromModule(module)
返回Expo.Asset實例,表示給定其模塊的資產

參數
module(number) - 資產的require('path / to / file')的值

返回
Expo.Asset資產的實例

const imageURI = Expo.Asset.fromModule(require('./images/hello.jpg')).uri;

在運行這段代碼時,imageURI會提供遠程URI,可以讀取images / hello.jpg的內容。 該路徑相對於該代碼在其中進行評估的源文件被解析。

 

AppLoading

一個React組件,告訴expo如果它是應用程式中呈現的第一個也是唯一的組件,則應用程式載入屏幕將保持打開狀態。 當它被刪除時,載入屏幕將消失,您的應用程式將可見。

這非常有用,可讓您下載和緩存字體,徽標和圖標圖像以及其他資產,以確保用戶在其開始使用應用程式之前確保用戶在其設備上獲得最佳體驗。

import React from 'react';
import { Image, Text, View } from 'react-native';
import { Asset, AppLoading } from 'expo';

export default class App extends React.Component {
  state = {
    isReady: false,
  };

  render() {
    if (!this.state.isReady) {
      return (
        <AppLoading
          startAsync={this._cacheResourcesAsync}
          onFinish={() => this.setState({ isReady: true })}
          onError={console.warn}
        />
      );
    }

    return (
      <View style={{ flex: 1 }}>
        <Image source={require('./assets/images/expo-icon.png')} />
        <Image source={require('./assets/images/slack-icon.png')} />
      </View>
    );
  }

  async _cacheResourcesAsync() {
    const images = [
      require('./assets/images/expo-icon.png'),
      require('./assets/images/slack-icon.png'),
    ];

    const cacheImages = images.map((image) => {
      return Asset.fromModule(image).downloadAsync();
    });
    return Promise.all(cacheImages)

  }
}

屬性

為了向後相容(推薦使用SDK21),建議使用以下屬性,但可選。 如果您不提供任何道具,則負責協調載入資產,處理錯誤以及更新狀態以卸載AppLoading組件。

startAsync(function) - 一個返回Promise的函數,Promise應該在應用程式完成載入所需的數據和資產時解析。

onError(function) - 如果startAsync引發錯誤,它將被捕獲並傳遞給提供給onError的函數。

onFinish(function) - (如果您提供startAsync,則為必需)。 startAsync解析或拒絕時調用。 這應該用於設置狀態並卸載AppLoading組件。

 

掃碼機(BarCodeScanner)

React組件,用於為設備的前置或後置相機取景器渲染取景器,並檢測出框架中顯示的條形碼。 BarCodeScanner在下麵使用Camera,因此在使用BarCodeScanner時可以使用任何Camera prop或方法。

需要 Permissions.CAMERA

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { BarCodeScanner, Permissions } from 'expo';

export default class BarcodeScannerExample extends React.Component {
  state = {
    hasCameraPermission: null,
  }

  async componentWillMount() {
    const { status } = await Permissions.askAsync(Permissions.CAMERA);
    this.setState({hasCameraPermission: status === 'granted'});
    }

  render() {
    const { hasCameraPermission } = this.state;

    if (hasCameraPermission === null) {
      return <Text>Requesting for camera permission</Text>;
    } else if (hasCameraPermission === false) {
      return <Text>No access to camera</Text>;
    } else {
      return (
        <View style={{ flex: 1 }}>
          <BarCodeScanner
            onBarCodeRead={this._handleBarCodeRead}
            style={StyleSheet.absoluteFill}
          />
        </View>
      );
    }
  }

  _handleBarCodeRead = ({ type, data }) => {
    alert(`Bar code with type ${type} and data ${data} has been scanned!`);
  }
}

github上一個完整的demo

屬性

  • onBarCodeRead(function) - 成功讀取條形碼時調用的回調函數。 該回調提供了一個形狀為{type:string,data:string}的對象,其中的類型是指掃描的條形碼類型,數據是條形碼中編碼的信息(在這種情況下是QR碼 ,這通常是一個URL)
  • type(string) - 當“(front)前”時,請使用前置攝像頭。 當“返回”時,請使用背面照相機。 預設值:'(back)後'。
  • torchMode(string) - 當'on(開)'時,設備上的閃光燈將會打開,'off(關)'時閃光燈會熄滅。 預設為“關閉”。
  • barCodeTypes(array) - 一組條形碼類型。 用法:BarCodeScanner.Constants.BarCodeType.<codeType>其中codeType是上面列出的之一。 預設值:所有支持的條碼類型。 例如:barCodeTypes = {[BarCodeScanner.Constants.BarCodeType.qr]}

 Expo大作戰翻譯系列結束,expo sdk的部分api沒有翻譯,大家如果有需要可以瀏覽官網,本章主要翻譯expo sdk 之 Assets,BarCodeScanner,AppLoading大家關註我的微信公眾號,這篇文章是否被大家認可,我的衡量標準就是公眾號粉絲增長人數。歡迎大家轉載,但必須保留本人博客鏈接!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、資料庫應用系統生命周期 DBAS的生命周期由項目規劃、需求分析、系統設計、實現與部屬、運行管理與維護等5個基本活動組成。 (一)需求分析: ① 數據需求分析 :描述用戶需要組織的信息內容,形成數據字典 ② 功能需求分析:描述系統做什麼,數據處理需求分析、業務規則需求分析 ③ 性能需求分析:描述系 ...
  • 今天做了一件坑了自己的事情,為此浪費了好多時間。。。 在mybatis的設置中,看到了這樣的一行設置。出於程式員的好奇,去搜索了一下,這條設置是乾什麼的。 <setting name="callSettersOnNulls" value="true"/> 在網上眾多大神的解答下,終於一知半解了。 在 ...
  • 最近由於想把ASPNETCORE弄到MAC上進行開發,也想把Mozlite資料庫移植到Mysql的支持,所以用到了Docker這個東東。因為由於對於MAC開發不常用有點陌生,下麵記錄一下安裝過程以及使用的一些命令。 ...
  • Windows下MongoDB的安裝與配置 介紹:因為學習python爬蟲框架,需要安裝MongoDB,在此記錄安裝過程。(參考了網上很多文章,在此對先輩表示感謝) 一、官網下載地址:https://www.mongodb.com/download-center?jmp=nav#community, ...
  • 本文為mariadb官方手冊:DECLARE Variable的譯文。 原文:https://mariadb.com/kb/en/library/declare-variable/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/declare-vari ...
  • 導出數據時報錯: 如果你是導出office 2007格式 就是:微軟。ace.oledb.12.0”的提供者沒有在本地機器上註冊。 如果你是導出office 2016格式 解決方法: 安裝AccessDatabaseEngine.exe。 office 2007版: 下載路徑:http://www. ...
  • 本文為mariadb官方手冊:SELECT INTO的譯文。 原文:https://mariadb.com/kb/en/selectinto/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/selectinto/ 語法 描述 使用SELECT ... ...
  • 類添加屬性 Property.h 文件 Property.m 中 #import "NSObject+Property.h" #import <objc/runtime.h> /** 擴展類(分類)添加屬性: a. 變數生成set,get方法的申明,不會生成實現,需要自己去寫實現方法,也不會生成帶下 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...