2013-07-02 2 views
0

У меня возникла проблема с попыткой сделать скриншоты формы UIWebViews. Мне нужно сделать несколько скриншотов из моего UIWebView, и он работает, но скриншот неверен, потому что они приняты в случае webViewDidFinishLoad, но он вызывает webViewDidFinishLoad, когда UIWebView не загружен полностью, я имею в виду, я снимаю снимок экрана в случае webViewDidFinishLoad но UIWebView неправильно и полностью загружен, поэтому требуется скриншот, и он делает правильный, но скриншот не совсем корректен, потому что его событие запускается (webViewDidFinishLoad), но UIWebView не полностью загружен. Есть идеи?UIWebView screenshot

Большое спасибо

ответ

0

Вместо того, чтобы скриншот в случае webViewDidFinishLoad вы можете попытаться взять скриншот явно с помощью UIButton. Пусть эта кнопка отключена, и вы можете просто установить включенное свойство этой кнопки YES после того, как веб-просмотр полностью загрузит его содержимое. Нажатие кнопки позволяет реализовать код, чтобы сделать снимок экрана.

Отредактировано: WebViewDidFinishLoad метод вызывается при завершении загрузки его содержимого. Возможно, возможно, что на его представление может потребоваться некоторое время, чтобы отобразить некоторые изображения/контент. Если возможно, вы можете использовать NSTimer в методе webViewDidFinishLoad, чтобы подождать достаточно времени (1 мин.), Чтобы в то время как веб-просмотр мог полностью загрузить его содержимое. не

NSTimer * Таймер = [NSTimer scheduledTimerWithTimeInterval: 60,0 Цель: На себя селектор: @selector (MethodName :) UserInfo: ноль повторов: NO];

В методе выбора вы можете реализовать свой код снятия снимков экрана.

Надеется, что это поможет ...

+0

Да, это решение, но оно должно быть сделано программно, поэтому я не могу использовать UIButton для этого. Кажется, что событие UIWebView webViewDidFinishLoad запускается, когда представление не полностью загружено. Так что мне нужно другое решение, но большое спасибо за ваш ответ. – AlfuryDB

+0

Я отредактировал свой ответ выше. Надеюсь, это поможет вам. – Mahesh

+0

Наконец, я забыл ответить, но я использовал функцию javascript для связи с UIWebView и сделать снимок экрана в тот момент, когда захотел. В любом случае, спасибо вам большое :) – AlfuryDB

0

Пользователь был, имеющие проблемы с их использованием показателя активности, что apears до тех пор, пока страница загрузится, но их вернутся после того, как основное содержание погрузил вопрос здесь 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 
    } 
} 

При загрузке страницы в ИО , webviewdidstart и webviewdidfinish, но не зная разницы в вашей главной странице/html-контенте цели-c, снова вызывает этот дополнительный контент, такой как реклама или фреймы. Используя это, если бы я был в вашей ситуации, я бы создал BOOL, например pageIsLoading, и установил его в true в webviewdidstart, а затем установил в false в webviewdidfinish. После того, как BOOL отключен в webviewdidfinish, я бы закончил webviewdidfinish, вызвав метод, который будет проверяться после короткой задержки, если BOOL pageIsLoading == YES и если это так, ничего не делать, потому что загружается больше контента. Если pageIsloading == no, тогда весь контент должен быть загружен, и теперь самое подходящее время для моментального снимка.