2010-05-06 3 views
7

У меня есть приложение, в котором я обрабатываю локальные HTML-файлы в UIWebView. Файлы, однако, иногда большие, и переход туда, где вы хотите, занимает много времени со скоростью прокрутки по умолчанию. Есть ли способ увеличить вертикальную скорость прокрутки UIWebView?iPhone dev: Увеличьте скорость прокрутки в UIWebView?

ответ

23

В iOS 5 мы можем получить доступ к объекту scrollView объекта UIWebView.

Если вы ориентируетесь IOS 5+, вы можете просто позвонить:

webView.scrollView.decelerationRate = UIScrollViewDecelerationRateNormal; 
2

Искать подвид из UIWebView, который отвечает на -setScrollDecelerationFactor: (это UIScroller - частный класс, единственные подтаблицы из UIScrollView). Вы увидите, что он принимает те же факторы замедления, определенные для класса общественного UIScrollView:

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

Обратите внимание, что метод я использую viewWithSelector: является методом, который я определен в категории UIView. Предположительно, если UIWebView изменится в будущем, мой поиск вернет нуль, и этот метод станет no-op.

+0

Я не был в состоянии сделать это. Я использую следующий код: 'для (UIView * подвид в self.currentScrollView.subviews) { если ([подпанель respondsToSelector: @selector (setScrollDecelerationFactor :)]) { [подпанель setScrollDecelerationFactor: UIScrollViewDecelerationRateNormal];' Но это условие никогда не будет истинным. Любая помощь? –

+0

My -viewWithSelector: метод пересекает иерархию представлений за пределами рассматриваемых объектов. UIScroller скорее всего не является прямым потомком UIWebView, поэтому ваш код не находит его. – MrO

+0

это отклонит ваше приложение. –

0

Рассматривали добавление # тегов в ваш html на значительных границах?

Вы можете использовать собственный пользовательский интерфейс для реализации закладок или ToC для упрощения навигации или просто вставлять ссылки на соответствующие цели прямо в свой html.

Если вы ускоряете прокрутку, ваше приложение подвержено риску отклонения от нестандартности, поскольку это может смутить пользователей, которые привыкли к просмотру веб-страниц со стандартным «ощущением».

7

Найти подвид из UIWebView, который является UIScrollView, а затем установить decelerationRate к UIScrollViewDecelerationRateNormal. Это делает UIWebView так же быстро, как обычный UIScrollView.

В iOS 4/5 мы можем просто использовать последний подзаголовок UIWebView.

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

по умолчанию decelerationRate из UIScrollView UIWebView является 0,989324, а UIScrollViewDecelerationRateFast составляет 0,99, а UIScrollViewDecelerationRateNormal является 0,998.

Этот метод не использует какой-либо частный API.

Смежные вопросы