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
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;
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.
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.
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.
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? –
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
la tua app verrà respinta. –