De ce que j'ai vu, UIWebView ne joue pas bien avec les autres. Pour les modules de reconnaissance de geste, vous pouvez essayer de retourner OUI partir de:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
J'ai eu d'être compatible avec la version 3.0 j'ai donc fini par faire tout le geste de manipulation avec le Javascript à l'intérieur de la UIWebView. Pas une bonne solution, mais cela a fonctionné pour mes besoins. J'ai été en mesure de capturer un appui long sur un élément, ainsi que les touchez, faites glisser, pincer et de rotation. Bien sûr, j'ai été en utilisant uniquement le contenu local.
Edit:
Vous pouvez regarder dans PhoneGap pour un exemple de l'envoi de messages à la déléguée de la UIWebView. En un mot, vous utilisez document.location = "myscheme:mycommand?myarguments"
alors d'analyser la commande et les arguments de ce délégué de rappel:
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ( [[[inRequest URL] absoluteString] hasPrefix:@"myscheme:"] ) {
//.. parse arguments
return NO;
}
}
Vous pouvez le voir dans la PhoneGap code qu'ils ont mis en place une file d'attente et la minuterie pour envoyer les messages. En fonction de votre utilisation, vous devrez peut-être faire la même chose. Il y a d'autres questions sur DONC sur ce sujet.
Ici est la gestion des Événements de la documentation. Dans mon cas, j'ai ajouté des écouteurs d'événements à document
de <body onload="myloader();">
function myloader() {
document.addEventListener( 'touchcancel' , touch_cancel , false );
document.addEventListener( 'touchstart' , touch_start , false );
document.addEventListener( 'touchmove' , touch_move , false );
document.addEventListener( 'touchend' , touch_end , false );
};
L'événement réel de la manipulation varie beaucoup en fonction de vos besoins. Chaque gestionnaire d'événement recevra un TouchEvent avec une touche de la propriété où chaque élément est une Touch. Vous pouvez enregistrer l'heure de début et l'emplacement dans votre gestionnaire d'évènements touchstart. Si la touche déplacer pour la mesure ou la mauvaise quantité de temps qui passe, il n'est pas un long touch.
WebKit peut essayer de gérer une longue touche pour démarrer une sélection et copie. Dans votre gestionnaire d'événements, vous pouvez utiliser event.preventDefault();
pour arrêter le comportement par défaut. J'ai aussi trouvé l' -webkit-user-select:none
css bien pratique pour certaines choses.
var touch = {};
function touch_start( event /*TouchEvent*/ {
event.preventDefault();
touch = {};
touch.startX = event.touches.item(0).pageX;
touch.startY = event.touches.item(0).pageY;
touch.startT = ( new Date() ).getTime();
}
Ce n'est que le deuxième projet, j'ai utilisé du javascript avec. Vous pouvez trouver de meilleurs exemples ailleurs.
Comme vous pouvez le voir ce n'est pas une réponse rapide à votre problème. Je suis assez heureux avec les résultats que j'ai obtenu. Le html je travaillais avait pas d'éléments interactifs au-delà d'un lien ou deux.