2010-05-06 2 views
7

Ho un'app in cui eseguo il rendering di file HTML locali in un UIWebView. I file, tuttavia, sono a volte di grandi dimensioni e raggiungere la posizione desiderata richiede molto tempo con la velocità di scorrimento predefinita. C'è un modo per aumentare la velocità di scorrimento verticale di un UIWebView?Dev dev iPhone: aumenta la velocità di scorrimento in UIWebView?

risposta

23

In iOS 5 è possibile accedere alla proprietà scrollView dello UIWebView.

Se si prendono di mira iOS 5+, si può semplicemente chiamare:

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 
2

Cerca un visualizzazione secondaria di UIWebView che risponde a -setScrollDecelerationFactor: (è UIScroller - una classe privata che è l'unica visualizzazione secondaria di UIScrollView). Troverete che ci vogliono gli stessi fattori di decelerazione definiti per la classe UIScrollView pubblico:

- (void)webViewDidFinishLoad:(UIWebView *)aView { 
    id decelerator = [aView viewWithSelector:@selector(setScrollDecelerationFactor:)]; 
    [decelerator setScrollDecelerationFactor:UIScrollViewDecelerationRateNormal]; 
} 

Si noti che il metodo che sto utilizzando viewWithSelector: è un metodo che ho definito in una categoria di UIView. Presumibilmente, se UIWebView dovesse cambiare in futuro, la mia ricerca restituirà zero e questo metodo diventerà un no-op.

+0

non ero in grado di farlo. Io uso il seguente codice: 'for (UIView * visualizzazione secondaria in self.currentScrollView.subviews) { if ([visualizzazione secondaria respondsToSelector: @selector (setScrollDecelerationFactor :)]) { [visualizzazione secondaria setScrollDecelerationFactor: UIScrollViewDecelerationRateNormal];' Ma quella condizione non è mai vera. Qualsiasi aiuto? –

+0

My -viewWithSelector: il metodo attraversa la gerarchia della vista oltre le sottoview. Probabilmente UIScroller non è un discendente diretto di UIWebView, quindi il tuo codice non lo trova. – MrO

+0

la tua app verrà respinta. –

0

Hai pensato di aggiungere # tag nel tuo html su limiti significativi?

Si potrebbe effettivamente utilizzare l'interfaccia utente nativa per implementare i segnalibri o un ToC per una navigazione più semplice, o semplicemente incorporare i collegamenti agli obiettivi appropriati direttamente nel proprio html.

Se si "velocizza lo scorrimento", l'app è a rischio di rifiuto per non essere standard, poiché potrebbe confondere gli utenti abituati a vedere le visualizzazioni del Web con un "tocco" standard.

7

Trova una visualizzazione secondaria di UIWebView che è un UIScrollView, quindi impostare decelerationRate a UIScrollViewDecelerationRateNormal. Ciò rende UIWebView veloce come un normale UIScrollView.

In iOS 4/5, possiamo semplicemente utilizzare l'ultima sottoview di UIWebView.

UIScrollView *scroll = [webView.subviews lastObject]; 
if ([scroll isKindOfClass:[UIScrollView class]]) { 
    scroll.decelerationRate = UIScrollViewDecelerationRateNormal; 
} 

L'impostazione predefinita decelerationRate di UIScrollView di UIWebView è 0,989,324 mila, mentre UIScrollViewDecelerationRateFast è 0.99 e UIScrollViewDecelerationRateNormal è 0.998.

Questo metodo non utilizza alcuna API privata.