2015-11-09 2 views
2

Je développe une extension keybaord pour iOS. Sur iOS 9, les touches réagissent immédiatement, à l'exception des touches situées le long du bord gauche du clavier. Ceux-ci réagissent avec environ 0,2 seconde de retard. La raison en est que les touches sont simplement livrées avec ce délai au UIView qui est la vue racine de mon clavier. Sur iOS 8, il n'y a pas de retard.Les événements tactiles sont retardés près du bord de l'écran gauche sur iOS 9 uniquement. Comment le réparer?

Je suppose que ce retard est causé par une logique qui est censée reconnaître le geste pour ouvrir "l'écran des applications en cours d'exécution". C'est bien mais le retard sur un clavier est inacceptable. Est-il possible de savoir comment obtenir ces événements sans délai? Peut-être simplement mettre delaysTouchesBegan à false sur certains UIGestureRecognizer?

+0

Avez-vous trouvé une solution pour cela? Nous éprouvons le même problème. Frustrant! –

+0

J'aimerais aussi trouver une solution pour cela. – Randy

+0

Toujours pas de solution à cela? – NJanf

Répondre

1

Si vous avez accès à la propriété de windowview, vous pouvez accéder à ces gestes système et mis reconnaisseurs delaysTouchesBegan-false.

Voici un exemple de code dans rapide qui fait que

if let window = view.window, 
    let recognizers = window.gestureRecognizers { 
    recognizers.forEach { r in 
     // add condition here to only affect recognizers that you need to 
     r.delaysTouchesBegan = false 
    } 
} 

également pertinente: UISystemGateGestureRecognizer and delayed taps near bottom of screen

1

Ceci est pour toute personne utilisant les versions ultérieures d'iOS (ce qui fonctionne sur iOS 9 et 10 pour moi). Mon problème a été causé par le geste de retour qui a interféré avec ma méthode TouchesBegan en l'empêchant de tirer sur le bord gauche de l'écran jusqu'à ce que le toucher soit terminé, ou le système a reconnu que le mouvement n'était pas celui du balayage. retourne le geste.

Dans votre fonction viewDidLoad dans votre contrôleur, tout simplement:

self.navigationController?.interactivePopGestureRecognizer?.delaysTouchesBegan = false