Определите, касался ли Apple карандаш или палец в веб-обзоре (реагировать на родной язык)
В сафари мобильных телефонах штрихи можно классифицировать как Apple Pencil vs other (finger/mouse), используя:
event.touches[0].touchType === 'stylus' //pencil
event.touches[0].touchType !== 'stylus' //other
Однако все события, полученные в ответном собственном веб-просмотре (как для Apple Pencil, так и при использовании пальца), получают:
touchType === 'direct' //inside webview, both pencil and other
Как я могу обнаружить прикосновение с Apple Pencil в веб-обзоре?
Очевидно, event.touches[0] > 0
- еще одна возможность, но для обоих типов в webview также устанавливается значение 0
.
(Не уверен, что это проблема с реагированием на родное или встроенное ограничение веб-просмотров).
Связанные с:
Ответы
Ответ 1
Я решил эту проблему, заменив компонент React Native WebView компонентом WKWebView с https://github.com/CRAlpha/react-native-wkwebview
т.е. Заменить import { WebView } from 'react-native'
с import WKWebView from 'react-native-wkwebview-reborn'
Это потребовало различных модификаций и обходных решений, но в конечном итоге было успешным, и теперь события включают дополнительные параметры, такие как:
- touchType
- сила
- altitudeAngle
- azimuthAngle
Похоже, что более старый WebView может не поддерживать дополнительные параметры событий, связанные с Pencil/Stylus (но также возможно, что я использовал неправильную/старую версию или, возможно, React Native не передал их через собственный компонент WebView. с удовольствием обновляем более подробно, если кто-нибудь может уточнить).
Ответ 2
Если вы посмотрите дату выхода iOS 8
17 сентября 2014 года
Дата выпуска карандаша Apple
11 ноября 2015 года
Дата выхода сенсорной версии Apple
9 сентября 2014 г.
Теперь, если вы посмотрите на нижнюю статью из яблока
https://developer.apple.com/documentation/webkit/wkwebview
Важный
Начиная с iOS 8.0 и OS X 10.10, используйте WKWebView для добавления веб-контента в ваше приложение. Не используйте UIWebView или WebView.
Таким образом, возможно, WKWebView
поддерживает поддержку этих вещей по сравнению с UIWebView
. Но это не может быть подтверждено без экспериментов, поскольку документация с четкими различиями между ними отсутствует
Было огромное обсуждение использования WKWebView
по умолчанию на iOS8+ для реакции native. Вы можете найти то же самое ниже
https://github.com/facebook/react-native/issues/321
Вы можете увидеть комментарий от компонента поддержки компонента WKWebView
Сопровождайте реакцию-native-wkwebview здесь. Я согласен с тем, что для этого репо есть ограниченные преимущества, которые могут быть объединены в ядро, одна из которых - поддержка Экспо (Expo по-прежнему использует UIWebView). Но я думаю, что это скорее проблема для Экспо, а не React Native.
ИМО, React Native должен сосредоточиться на "основных" мостах, и этот компонент должен радостно жить как сторонний компонент. Это облегчает людям возможность внести свой вклад в этот проект. Кроме того, это означает гибкий график выпуска (в отличие от ежемесячного расписания релиза React Native)
И я согласен с @brunolemos в том, что совершенствование React Native docs - лучший способ сделать людей более осведомленными о решении относительно UIWebView и WKWebView и указать их на решение.
Поэтому я думаю, что возможно, что WKWebView
имеет больше возможностей в событиях, чем устаревший UIWebView
. Но, к сожалению, после долгих разрывов я не мог найти такой официальной информации. Я бы добавил дополнительную информацию, если бы у меня был iPhone/iPad, с которым я мог бы экспериментировать.
Я пробовал с симулятором, и я получаю следующие поля в событиях для UIWebView
и WKWebView
WKWebView
UIWebView
В JSFiddle я использовал
https://jsfiddle.net/J4djY/166/
Но поскольку у меня нет физического устройства, я не могу подтвердить некоторые из наблюдений