我正在创建一个iOS应用。
我将包含多页的PDF分隔到每个页面,
然后创建UIWebViews以显示每个页面。
代码是这样的。
for( int i = 0; i < _pageNumbers; i++)
{
_webView = [[UIWebView alloc]init];
_webView.delegate = self;
_webView.frame = imageViewFrame;
_webView.scalesPageToFit = YES;
_webView.autoresizingMask =
UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleWidth |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleHeight |
UIViewAutoresizingFlexibleBottomMargin;
[self setImageAtIndex:i toScrollView:imageScrollView];
}
- (void)setImageAtIndex:(NSInteger)index toScrollView:(ImageScrollView*)ScrollView
{
UIWebView *theWebView = (ScrollView.subviews)[0];
if (index < 0 || [webViews count] <= index) {
theWebView = nil;
return;
}
dispatch_queue_t queueLoadPDF = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_sync(queueLoadPDF, ^{
NSString *document = [[[[NSString alloc]initWithString:_documwntPath]stringByAppendingString:@"/"]stringByAppendingFormat:@"Page%zd.pdf",(index + 1) ];
NSURL *url = [NSURL fileURLWithPath:document];
NSString *urlString = [url absoluteString];
NSString *encodedString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *webURL = [NSURL URLWithString:encodedString];
NSURLRequest *req = [NSURLRequest requestWithURL:webURL];
[theWebView loadRequest:req];
});
}
PDF页面很大。在调用loadRequest之后,程序返回循环并创建新的UIWebview。
我想等到webViewDidFinishLoad被调用后再返回循环。
有没有解决方案?
感谢您的帮助。
答案 0 :(得分:0)
@MasaruKitajima有点难以看到你想要做什么。我最初的想法和@Chinttu -Maddy-Ramani的想法一样,但是当我再次看到你的代码时,我发现我的粗略假设存在更多问题。我会提出几个问题,你应该在回答时再考虑一下你的设计。
不知何故,你的代码对我来说没有意义。我在你的代码中看到[webViews count]。滚动视图中有多个webview吗?但我看到_webView,我认为它是一个成员变量,你在for循环中启动它?这是做什么的?你应该能够先回答这个问题。你可能只加载一个webview,不是因为你不知道如何在webViewDidFinishLoad中加载下一个webview,而是因为你只有一个webview?
其次,我认为你想一次加载一个webview,这个设计对我来说也没有意义。当ImageScrollView向下滚动到下一个webview时,您应该加载下一个webview。这个想法与显示最后一个单元格时在表视图中加载下一个数据的方式非常相似。