0

我在尝试截取屏幕截图时遇到问题UIWebViews。我需要截取我的一些屏幕截图,UIWebView它可以工作,但屏幕截图不正确,因为它们是在事件中拍摄的webViewDidFinishLoad,但是它webViewDidFinishLoadUIWebView未完全加载时调用,我的意思是,我在事件中截取屏幕截图webViewDidFinishLoadUIWebView不正确并已完全加载,因此它会截取屏幕截图并且正确,但屏幕截图并不完全正确,因为它的事件已触发(webViewDidFinishLoad)但UIWebView并未完全加载。有任何想法吗?

非常感谢

4

2 回答 2

0

而不是在事件 webViewDidFinishLoad 中截取屏幕截图,您可以尝试使用 UIButton 显式截取屏幕截图。禁用此按钮,您可以在 Web 视图完全加载其内容后将此按钮的启用属性设置为 YES。单击按钮可以实现您的代码以截取屏幕截图。

已编辑:Webview 的 webViewDidFinishLoad 方法在完成加载其内容时被调用。可能需要一些时间才能在其视图上呈现一些图像/内容。如果可能的话,您可以在 webViewDidFinishLoad 方法中使用 NSTimer 来等待足够的时间(1 分钟),这意味着 webview 可以完全加载其内容。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:60.0 目标:自我选择器:@selector(MethodName:) userInfo: nil repeats: NO];

在 Selector 方法中,您可以实现截屏代码。

希望对你有帮助...

于 2013-07-02T11:36:33.377 回答
0

用户在使用活动指示器时遇到问题,该指示器在页面加载之前出现,但在主要内容加载后他们的活动指示器会回来问题是这里 UIWebView 没有完成加载?答案代码在下面使用。在代码之后,我将详细介绍如何将其用于您的情况。

(在下面的代码中,网页真正开始加载//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 则必须加载所有内容,现在是拍摄快照的好时机。

于 2013-07-03T04:16:00.220 回答