Воспринимаемая производительность имеет решающее значение в мобильных приложениях. Нам нужно сделать наши приложения быстрыми и быстрыми, иначе пользователи не будут их использовать.
Добавление таких функций, как анимация и тактильная обратная связь, делает мобильные приложения более производительными. В этой статье мы поговорим о Haptic Feedback в React Native — что это такое и как мы можем реализовать его в мобильных приложениях.
Тактильная обратная связь — это сконструированная обратная связь от прикосновения к игре, консоли или смартфону. Вы знаете эти вибрации из ваших любимых видеоигр, когда ваш персонаж умирает или когда мяч попадает в перекладину в FIFA.
Взгляните на большие приложения, такие как Facebook, Instagram или Twitter, и обратите внимание, как приятна тактильная обратная связь в вашей руке, когда вы выполняете важные действия, такие как лайки или подписки.
Библиотека тактильной обратной связи, которую мы собираемся изучить в этом руководстве по React Native, предоставлена компанией Expo и называется expo-haptics. После изучения библиотеки мы продолжим и создадим крошечное приложение, чтобы применить то, что мы узнали.
Установка
Создать новый выставочный проект
expo init haptic_feedback_example
Установите expo-haptics
expo install expo-haptics
Теперь давайте рассмотрим методы и их наиболее вероятный вариант использования. Эта зависимость предоставляет три метода:
а. Haptics.selectionAsync(): эта функция не принимает аргументов. Этот вызов производит вибрацию примерно через 1 секунду после срабатывания этой функции. Эту функцию можно применить, когда анимация завершена. Анимация может быть инициирована пользователем или программно.
б. Haptics.notificationAsync(type): эта функция принимает аргумент type, который может быть одним из следующих:
- Haptics.NotificationFeedbackType.Success
- Haptics.NotificationFeedbackType.Warning
- Haptics.NotificationFeedbackType.Error
Эта функция может применяться при предоставлении обратной связи после проверки. Постоянные пользователи Snapchat знакомы с этой вибрацией на своем телефоне после сканирования QR-кода Snapchat.
в. Haptics.impactAsync(style): эта функция также принимает только один аргумент, который обычно представляет собой одно из трех значений в зависимости от интенсивности желаемой обратной связи:
- Haptics.ImpactFeedbackStyle.Light
- Haptics.ImpactFeedbackStyle.Medium
- Haptics.ImpactFeedbackStyle.Heavy
Эта функция при вызове обеспечивает более быструю обратную связь, чем selectionAsync, и может использоваться для предоставления мгновенной тактильной обратной связи, когда пользователь нажимает кнопку. Начинкой на торте является то, что вы можете регулировать интенсивность вибрации.
Тактильная обратная связь в React Native
Пример 1
У нас уже есть проект React Native, поэтому давайте создадим простой проект, протестируем метод impactAsync и изучим различные стили тактильной обратной связи:
/** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow strict-local */ import React from 'react'; import {StyleSheet, TouchableOpacity, View, Text} from 'react-native'; import * as Haptics from 'expo-haptics'; const HapticFeedbackExample = () => { function impactAsync(style) { switch (style) { case 'light': Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); break; case 'medium': Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium); break; default: Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Heavy); break; } } return ( <View> <TouchableOpacity onPress={() => impactAsync('light')}> <Text style={styles.light}>Light</Text> </TouchableOpacity> <TouchableOpacity onPress={() => impactAsync('medium')}> <Text style={styles.medium}>Medium</Text> </TouchableOpacity> <TouchableOpacity onPress={() => impactAsync('heavy')}> <Text style={styles.heavy}>Heavy</Text> </TouchableOpacity> </View> ); }; const styles = StyleSheet.create({ container: { flex: 1, alignItems: 'center', justifyContent: 'center', }, light: { color: '#ffffff', fontSize: 20, width: 300, height: 100, backgroundColor: 'green', marginVertical: 10, }, medium: { color: '#ffffff', fontSize: 20, width: 300, height: 100, backgroundColor: 'orange', marginVertical: 10, }, heavy: { color: '#ffffff', fontSize: 20, width: 300, height: 100, backgroundColor: 'red', marginVertical: 10, }, });
Что мы делаем в кодовой базе React Native выше?
Мы создаем три кнопки для представления трех стилей impactAsync. У нас есть этот простой снимок экрана, показывающий различные кнопки с их несколькими стилями и интенсивностью:
Запустите проект и начните попеременно нажимать три кнопки. При внимательном наблюдении вы заметите небольшие различия в интенсивности в диапазоне от легкой до средней и тяжелой.
Пример 2
Давайте создадим небольшой QR-сканер, чтобы проверить, является ли разрешенный QR-код допустимым URL-адресом.
Для этого мы должны добавить expo-barcode-scanner, предоставленный Expo.
expo install expo-barcode-scanner
Давайте напишем код для сканирования случайного штрих-кода и проверки правильности URL-адреса:
import React, {useState, useEffect} from 'react'; import {Text, View, StyleSheet, Button, Alert} from 'react-native'; import {BarCodeScanner} from 'expo-barcode-scanner'; import * as Haptics from 'expo-haptics'; export default function App() { const [isPermitted, setPermitted] = useState(null); const [scanned, setScanned] = useState(false); useEffect(() => { (async () => { const {status} = await BarCodeScanner.requestPermissionsAsync(); setPermitted(status === 'granted'); })(); }, []); const handleBarCodeScanned = ({type, data}) => { setScanned(true); is_url(data); }; function is_url(str) { const regexp = /^(?:(?:https?|ftp):\/\/)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/\S*)?$/; hapticNotify(regexp.test(str)); } const hapticNotify = (success) => { switch (success) { case true: Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success); Alert.alert('Success', 'This is a URL'); break; default: Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error); Alert.alert('Error', 'This is not a URL!!'); break; } }; if (isPermitted === null) { return <Text>Requesting for camera permission</Text>; } if (isPermitted === false) { return <Text>No access to camera</Text>; } return ( <View style={styles.container}> <BarCodeScanner onBarCodeScanned={scanned ? undefined : handleBarCodeScanned} style={StyleSheet.absoluteFillObject} /> {scanned && ( <Button title={'Tap to Scan Again'} onPress={() => setScanned(false)} /> )} </View> ); } const styles = StyleSheet.create({ container: { flex: 1, }, });
Что мы делаем в кодовой базе выше?
Мы должны сначала запросить разрешение, прежде чем мы приступим к сканированию штрих-кода, а затем проверим результат сканирования, чтобы проверить, является ли он URL-адресом:
Мы применяем различные стили тактильной обратной связи в зависимости от того, является ли URL-адрес отсканированного штрих-кода действительным или нет. Вы заметите разницу в тактильной обратной связи между сканированием действительного штрих-кода URL-адреса и недействительного штрих-кода URL-адреса.
Заключение о тактильной обратной связи в React Native
Мы рассмотрели библиотеку expo-haptics и возможные варианты ее использования. Мы пошли дальше, чтобы применить то, что мы узнали, создав пару небольших приложений, чтобы применить эти варианты использования и получить практическое представление о том, как ведут себя эти взаимодействия.
Добавить тактильную обратную связь в приложения React Native довольно просто, учитывая, что существуют библиотеки, которые могут сделать эту задачу тривиальной. Однако вам нужно тщательно выбирать, когда запускать эти тактильные взаимодействия с обратной связью, чтобы предоставить высококачественное мобильное приложение. Злоупотребление этими вибрациями разозлит ваших пользователей, а также довольно быстро разрядит аккумулятор их телефона, поэтому выбирайте с умом.
Чтобы узнать больше о мобильной производительности, ознакомьтесь с нашей статьей о том, как повысить производительность в мобильных приложениях.
Первоначально опубликовано на https://www.instamobile.io 10 февраля 2021 г.