2012-04-10 5 views
0

Я пытаюсь загрузить веб-представление с данными во время анимации прокрутки. Анимация вызова такова:Загрузка UIWebView блокирует анимацию прокрутки

[scrollView scrollRectToVisible:aFrame animated:YES]; 

Проблема, если процесс загрузки веб-вид перекрывается с Scrollview анимации, анимация заикался, происходит не плавная анимация. Похоже, что процесс загрузки блокирует основной поток, поэтому анимация не работает должным образом.

Что я могу сделать, чтобы решить эту проблему? В некоторых сообщениях люди предлагают разместить webview в качестве подсмотра в последней части

- (void)webViewDidFinishLoad:(UIWebView *)theWebView 

способ. Но загруженные данные не видны, если мне это нравится.

Спасибо за помощь.

EDIT 1:

@Vlad

Это решение не работает я думаю. Я звоню WebView нагрузки, как это:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void) { 
    [_webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:path]]; 
}); 

Но я вижу, что хотя loadHTMLString: BaseUrl: метод вызывается в не основной поток,

- (void)webViewDidStartLoad:(UIWebView *)theWebView 

и

- (void)webViewDidStartLoad:(UIWebView *)theWebView 

методы вызывается в основном потоке. Таким образом, этот метод не дал мне улучшения.

Также в качестве детали время между методами webViewDidStartLoad и webViewDidFinishLoad составляет около 0,3 секунды.

Что еще делать?

ответ

0

Попробуйте инициировать запрос нагрузки в отдельной теме. Самый простой способ сделать это - использовать GCD.

Если это будет ваш запрос:

NSURLRequest *request = [NSURLRequest requestWithURL:someURL]; 

отдельный вызов нить будет что-то вроде этого:

dispatch_queue_t workerQueue = dispatch_queue_create("QueueIdentifier", NULL); 
dispatch_async(workerQueue,^{ 
    [yourWebView loadRequest:request]; 
}); 
dispatchRelease(workerQueue); 

Использование этого больше не должно блокировать ваш UI нить, как все загрузки должно быть сделано в фоновом режиме.

+1

remmeber для использования __блока для вашего ivar –

+0

Умм, я попробую завтра. Я думал, что любой метод компонента пользовательского интерфейса должен быть вызван в основном потоке. – manuyavuz

+0

@ Vlad, я попробовал ваше решение, но оно не работает. Детали находятся на моем редактировании. – manuyavuz

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