我在尝试截取UIWebViews
屏幕截图时遇到问题。我需要拍摄UIWebView
的一些屏幕截图并且它有效,但屏幕截图不正确,因为它们是在事件webViewDidFinishLoad
中拍摄的,但在webViewDidFinishLoad
时调用UIWebView
没有完全加载,我的意思是,我在事件webViewDidFinishLoad
中截取屏幕截图,但UIWebView
未正确且完全加载,因此它需要截图并且它正确但屏幕截图不完全正确,因为事件被触发(webViewDidFinishLoad
),但UIWebView
未完全加载。有什么想法吗?
非常感谢
答案 0 :(得分:0)
您可以尝试使用UIButton显式获取屏幕截图,而不是在事件webViewDidFinishLoad中截取屏幕截图。让此按钮被禁用,您可以在Web视图完全加载其内容后将此按钮的enabled属性设置为YES。 单击按钮可以实现代码以截取屏幕截图。
已编辑:Webview的webViewDidFinishLoad方法在完成加载其内容时被调用。可能需要花一些时间在其视图上呈现一些图像/内容。 如果可能,您可以在webViewDidFinishLoad方法中使用NSTimer等待足够的时间(1分钟),以便在webview完全加载其内容时表示。
NSTimer * timer = [NSTimer scheduledTimerWithTimeInterval:60.0 目标:自我 selector:@selector(MethodName :) userInfo:无 重复:没有];
在选择器方法中,您可以实现截屏的代码。
希望这会对你有帮助......
答案 1 :(得分:0)
用户在使用活动指示符时遇到问题,直到页面已加载但是在主要内容加载后他们会回来问题是UIWebView not finishing loading?并且下面使用了答案代码。在代码之后,我将详细介绍如何将其用于您的情况。
(在下面的代码中,网页真正开始加载//show UIActivityIndicator
并真正完成加载//hide UIActivityIndicator
上的主要内容(而不是您正在努力争取的额外内容)
//Define the NSStrings "lastURL" & "currentURL" in the .h file.
//Define the int "falsepositive" in the .h file. (You could use booleans if you want)
//Define your UIWebView's delegate (either in the xib file or in your code)
- (void)webViewDidFinishLoad:(UIWebView *)webView {
lastURL = [[NSString alloc] initWithFormat:@"%@", webView.request.mainDocumentURL];
if (falsepositive != 1) {
NSLog(@"Loaded");
//hide UIActivityIndicator
} else {
NSLog(@"Extra content junk (i.e. advertisements) that the page loaded with javascript has finished loading");
//This method may be a good way to prevent ads from loading hehe, but we won't do that
}
}
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; {
NSURL *requestURL =[request mainDocumentURL];
currentURL = [[NSString alloc] initWithFormat:@"%@", requestURL]; //not sure if "%@" should be used for an NSURL but it worked...
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView {
if ([currentURL isEqualToString:lastURL]) {
falsepositive = 1;
NSLog(@"The page is loading extra content with javascript or something, ignore this");
} else {
falsepositive = 0;
NSLog(@"Loading");
//show UIActiviyIndicator
}
}
当在iOS中加载页面时,会调用webviewdidstart和webviewdidfinish,但不知道主页面/ html内容中的差异Objective-c会再次调用此内容以获取额外内容,例如广告或框架。如果我在你的情况下使用这个,我会创建一个BOOL,例如pageIsLoading,并在webviewdidstart中将其设置为true,然后在webviewdidfinish中将其设置为false。在webviewdidfinish中关闭BOOL后,我会通过调用一个方法来结束webviewdidfinish,如果BOOL pageIsLoading == YES,则会在短暂的延迟后检查,如果是,则不执行任何操作,因为正在加载更多内容。如果pageIsloading == no,则必须加载所有内容,现在是拍摄快照的好时机。