Détecter si le toucher était un crayon ou un doigt dans webview (react native))

dans safari mobile, les touches peuvent être classées comme Crayon Pomme vs autre (doigt / souris) en utilisant:

event.touches[0].touchType === 'stylus' //pencil
event.touches[0].touchType !== 'stylus' //other

cependant tous les événements reçus dans un WebView natif react (à la fois pour Apple Pencil et en utilisant un doigt) reçoivent:

touchType === 'direct' //inside webview, both pencil and other

Comment puis-je détecter un contact avec le crayon Apple dans un webview?

Apparemment event.touches[0] > 0 est une autre possibilité, mais c'est aussi 0 pour les deux types dans webview.

(pas sûr s'il s'agit d'un problème avec react native ou une limitation intégrée de webviews).

Related:

21
demandé sur Jonathan Miles 2018-03-07 03:04:59

2 réponses

j'ai résolu ce problème en remplaçant le composant WebView natif React par le composant WKWebView à partir de https://github.com/CRAlpha/react-native-wkwebview

, C'est-à-dire remplacer import { WebView } from 'react-native' par import WKWebView from 'react-native-wkwebview-reborn'

cela a nécessité diverses modifications et solutions de rechange, mais a finalement été couronné de succès, et les événements comprennent maintenant les paramètres supplémentaires tels que:

  • touchType
  • force
  • altitudeAngle
  • azimuthAngle

il semble que L'ancien WebView ne supporte peut-être pas les paramètres d'événement supplémentaires associés à Pencil/Stylus (mais il est aussi possible que j'utilisais une version erronée/ancienne ou peut-être que le natif de React ne les transmette pas depuis le composant natif de WebView. Je serais heureux de mettre à jour avec plus de détails si quelqu'un peut préciser).

7
répondu python1981 2018-04-09 07:07:55

si vous regardez iOS 8 date de sortie

17 septembre 2014

Et Apple crayon release date

11 novembre 2015

et la date de sortie de Force touch D'Apple

9 septembre 2014

maintenant si vous regardez l'article ci-dessous d'apple

https://developer.apple.com/documentation/webkit/wkwebview

Important

à partir de iOS 8.0 et OS X 10.10, utilisez WKWebView pour ajouter du contenu web à votre application. N'utilisez pas UIWebView ou WebView.

il est donc possible que le WKWebView ait un meilleur support pour ces choses par rapport à UIWebView . Mais on ne peut pas le confirmer sans expérimentation car aucune documentation avec des différences claires entre les deux n'est disponible

il y a eu une énorme discussion sur l'utilisation de WKWebView par défaut sur iOS8+ pour react native. Vous pouvez trouver la même sur ci-dessous

https://github.com/facebook/react-native/issues/321

Vous pouvez voir les commentaires de WKWebView réagir composant responsable

mainteneur de ici react-native-wkwebview. Je suis d'accord qu'il y a des avantages limités pour que ce repo soit fusionné dans core, l'un d'eux étant le soutien D'Expo (Expo utilise encore UIWebView). Mais je pense que C'est plus un problème pour Expo, plutôt que de réagir natif.

IMO, React Native devrait se concentrer sur les ponts" de base " et cette composante devrait vivre avec bonheur comme une composante de tierce partie. Cela permet aux gens de contribuer plus facilement à ce projet. De plus, cela signifie une libération flexible horaire (par opposition au calendrier de diffusion mensuel de React Native)

et je suis d'accord avec @brunolemos que l'amélioration de React Native docs est un meilleur moyen de sensibiliser les gens à la décision concernant UIWebView et WKWebView et de les orienter vers la solution.

donc je pense qu'il est possible que WKWebView ait plus de capacités dans les événements que le UIWebView déprécié . Mais malheureusement, après des heures à creuser Je n'ai pas pu trouvez une telle information officielle. J'aurais ajouté des informations supplémentaires si j'avais eu l'iPhone/iPad avec moi pour expérimenter.

j'ai essayé avec simulateur et j'obtiens les champs ci-dessous dans les événements pour UIWebView et WKWebView

WKWebView

Event

UIWebView

UIWevView

Le JSFiddle, j'ai utilisé

https://jsfiddle.net/J4djY/166 /

mais comme je n'ai pas de dispositif physique, Je ne peux pas confirmer certaines des observations

6
répondu Tarun Lalwani 2018-04-09 18:40:12