Как создать тактильную обратную связь в React Native
Воспринимаемая производительность имеет решающее значение в мобильных приложениях. Нам нужно сделать наши приложения быстрыми и быстрыми, иначе пользователи не будут их использовать. Добавление таких функций, как анимация и тактильная обратная связь, делает мобильные приложения более производительными. В этой статье мы поговорим о Тактильная обратная связь в React Native – что это такое и как мы можем реализовать это в мобильных приложениях.
Тактильная обратная связь — это сконструированная обратная связь от применения прикосновения к игре, консоли или смартфону. Вы знаете эти вибрации из ваших любимых видеоигр, когда ваш персонаж умирает или когда мяч попадает в перекладину в FIFA.
В Instamobile мы используем тактильную обратную связь во всех наших приложениях React Native, чтобы сделать взаимодействие с пользователем быстрым и привлекательным.. Взгляните на большие приложения, такие как Facebook, Instagram или Twitter, и обратите внимание, как приятна тактильная обратная связь в вашей руке, когда вы выполняете важные действия, такие как лайки или подписки.
Библиотека тактильной обратной связи, которую мы собираемся изучить в этом руководстве по React Native, предоставляется Экспо и называется _ экспо-хаптика _. После изучения библиотеки мы продолжим и создадим крошечное приложение, чтобы применить то, что мы узнали.
Монтаж
Создать новый выставочный проект
expo init haptic_feedback_example
Установить _ экспо-хаптика _
expo install expo-haptics
Теперь давайте рассмотрим методы и их наиболее вероятный вариант использования. Эта зависимость предоставляет три метода:
а.** Haptics.selectionAsync()**: эта функция не принимает аргументов. Этот вызов производит вибрацию примерно через 1 секунду после срабатывания этой функции. Эту функцию можно применить, когда анимация завершена. Анимация может быть инициирована пользователем или программно.
б. Haptics.notificationAsync (тип): Эта функция принимает аргумент тип который может быть одним из следующих:
- Haptics.NotificationFeedbackType.Success
- Haptics.NotificationFeedbackType.Warning
- Haptics.NotificationFeedbackType.Error
Эта функция может применяться при предоставлении обратной связи после проверки. Постоянные пользователи Snapchat знакомы с этой вибрацией на своем телефоне после сканирования QR-кода Snapchat.
в. Haptics.impactAsync (стиль): Эта функция также принимает только один аргумент стиль который обычно является одним из трех значений в зависимости от интенсивности желаемой обратной связи:
- Haptics.ImpactFeedbackStyle.Light
- Haptics.ImpactFeedbackStyle.Medium
- Haptics.ImpactFeedbackStyle.Heavy
Эта функция при вызове обеспечивает более быструю обратную связь, чем выборАсинхронный и может использоваться для мгновенной тактильной обратной связи, когда пользователь нажимает кнопку. Начинкой на торте является то, что вы можете регулировать интенсивность вибрации.
У нас уже есть проект React Native, поэтому давайте создадим простой проект и протестируем его. влияниеасинхронный метод и изучить различные стили тактильной обратной связи:
/**
* Sample React Native App
*
*
* @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 выше?
Мы создаем три кнопки для представления трех стилей влияниеасинхронный. У нас есть этот простой снимок экрана, показывающий различные кнопки с их несколькими стилями и интенсивностью:
Запустите проект и начните попеременно нажимать три кнопки. При внимательном наблюдении вы заметите небольшие различия в интенсивности от легкой до средней и сильной.
Пример 2
Давайте создадим небольшой QR-сканер, чтобы проверить, является ли разрешенный QR-код допустимым URL-адресом.
Для этого мы должны добавить экспо-сканер штрих-кода предоставлено Экспо.
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
Мы прошли через _ экспо-хаптика _library и возможные варианты ее использования. Мы пошли дальше, чтобы применить то, что мы узнали, создав пару небольших приложений, чтобы применить эти варианты использования и получить практическое представление о том, как ведут себя эти взаимодействия.
Добавить тактильную обратную связь в приложения React Native довольно просто, учитывая, что существуют библиотеки, которые могут сделать эту задачу тривиальной. Однако вам нужно тщательно выбирать, когда запускать эти тактильные взаимодействия с обратной связью, чтобы предоставить высококачественное мобильное приложение. Злоупотребление этими вибрациями разозлит ваших пользователей, а также довольно быстро разрядит аккумулятор их телефона, поэтому выбирайте с умом.
Чтобы узнать больше о мобильной производительности, ознакомьтесь с нашей статьей о том, как повысить производительность в мобильных приложениях.