Da quello che ho visto, UIWebView non funziona bene con gli altri. Per di riconoscimento gesto, si potrebbe provare a tornare SI da:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
dovevo essere compatibile con 3,0 così ho finito per fare tutta la movimentazione con JavaScript all'interno del UIWebView gesto. Non è una buona soluzione, ma ha funzionato per le mie esigenze. Sono stato in grado di catturare una pressione prolungata su un elemento, così come toccare, scorrere, pizzicare e ruotare. Certo, stavo usando solo contenuti locali.
Edit:
Si può guardare in PhoneGap per un esempio di invio di messaggi al delegato della UIWebView. In poche parole, si utilizza document.location = "myscheme:mycommand?myarguments"
quindi analizzare il comando e gli argomenti da questo delegato di callback:
-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType {
if ([[[inRequest URL] absoluteString] hasPrefix:@"myscheme:"]) {
//.. parse arguments
return NO;
}
}
Si può vedere nel codice PhoneGap che hanno istituito una coda e timer per inviare i messaggi. A seconda dell'utilizzo, potrebbe essere necessario fare la stessa cosa. Ci sono altre domande su SO su questo argomento.
Questa è la documentazione Event Handling. Nel mio caso ho aggiunto listener di eventi per document
da <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);
};
Il trattamento vero e proprio evento dipende molto dalle vostre esigenze. Ogni gestore di eventi riceverà un TouchEvent con una proprietà touches in cui ogni elemento è un Touch. È possibile registrare l'ora di inizio e la posizione nel gestore del touchstart. Se i tocchi si spostano troppo lontano o il tempo non passa, non è un tocco lungo.
WebKit può provare a gestire un tocco lungo per avviare una selezione e copiare. Nel gestore eventi è possibile utilizzare event.preventDefault();
per interrompere il comportamento predefinito. Ho anche trovato utile la proprietà css -webkit-user-select:none
per alcune cose.
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();
}
Questo è solo il secondo progetto con cui javascript è stato utilizzato. Puoi trovare esempi migliori altrove.
Come potete vedere questa non è una risposta rapida al vostro problema. Sono abbastanza soddisfatto dei risultati ottenuti. L'html con cui stavo lavorando non aveva elementi interattivi al di là di un link o due.
Grazie, non so nulla di Javascript; saresti così gentile da indicarmi la giusta direzione su come rilevare un tocco in una UIWebView tramite Javascript e chiamare un metodo Objective-C? Non mi dispiacerebbe essere compatibile con 3.0 per il targeting non iPad. Per gli altri che si occupano solo di 3.2+, ho risolto il problema creando semplicemente una vista trasparente direttamente su UIWebView e rilevando i relativi tocchi. – rscott
Grazie dat lavorato – user578386
Grazie, funziona bene –