我正在尝试在滚动动画期间加载带有数据的Web视图。动画调用是这样的:
[scrollView scrollRectToVisible:aFrame animated:YES];
问题是,如果Web视图加载过程与滚动视图动画重叠,则动画会断断续续,而不会出现平滑动画。似乎加载进程阻塞了主线程,因此动画无法按预期工作。
为了解决这个问题,我该怎么办?在一些帖子中,人们建议将webview作为子视图放在
的最后部分- (void)webViewDidFinishLoad:(UIWebView *)theWebView
方法。但是如果我喜欢的话,加载的数据是不可见的。
感谢您的帮助。
编辑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 :(得分: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线程,因为所有加载应该在后台完成。