Предварительная загрузка UIWebView, избегая белой экранной вспышки
Я работаю над приложением, которое имеет навигацию по таблицам, чтобы в конечном итоге перейти к UIWebView
, который отображает различную информацию. Однако переход от slickness UITableView
к медленной неуловимости UIWebView
для пользователя затруднен, поэтому я хочу улучшить этот опыт, но я могу.
В частности, фон страниц tableViews
и UIWebView
имеет черный фон, но когда я открываю UIWebView
, он мигает пустой белый примерно на секунду (это происходит как для локальных, так и для удаленных HTML файлов.) Как я могу (в идеале) предварительно загрузить этот процесс или (по крайней мере) сделать "флеш" все черным, а не всем белым? Я попытался сделать вид /webView фоном черным, но это, похоже, не помогло.
В моем приложении прямо сейчас, когда пользователь выбирает ячейку, приложение просто загружает подкласс UIWebView
и толкает его в стек навигации. Подкласс UIWebView
имеет индикатор активности, который запускает и останавливает анимацию на WebViewDidStartLoad
и WebViewDidFinishLoad, который отлично работает, но ничего не помогает, чтобы помочь "белой вспышке".
Ответы
Ответ 1
Я тестировал его... Я отправляю два метода, которые я использовал...
- (void)viewDidLoad {
[super viewDidLoad]; //objWebView is the outlet of UIWebView
[objWebView loadHTMLString:@"<html><body style=\"background-color:black;\"></body></html>" baseURL:nil];
//the more the delay the errors will be less so within 0.1-0.3 would be fine
[self performSelector:@selector(loadURL:) withObject:nil afterDelay:0.1];
}
-(void)loadURL:(id)sender{
[objWebView stopLoading]; //added this line to stop the previous request
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[objWebView loadRequest:req];
}
здесь я выполняю запрос через 0,1 сек, другой мудрый он будет выглядеть белым, как в вашем случае. Или вы можете дать свое время задержки в зависимости от времени. Приветствия:)
Ответ 2
Попробуйте использовать
-(void)viewDidLoad{
myWebView.hidden = YES;
Тогда в
-(void)loadURL:(id)sender{
myWebView.hidden = NO;
Ответ 3
Я использовал:
[webView setHidden:YES];
[webView setDelegate:self];
при создании моего webView и выполнении запроса, а затем добавлен этот метод делегата для обработки завершенных запросов:
- (void) webViewDidFinishLoad:(UIWebView*)webView{
[webView setHidden:NO];
}
Ответ 4
Успешно сделал это.
Сначала вы должны создать представление в Interface Builder.
Затем загрузите html в webview с помощью initWithFrame в init вашего ViewController, который содержит веб-просмотр (здесь происходит волшебство):
CGRect webFrame = [[UIScreen mainScreen] applicationFrame];
webView = [[UIWebView alloc] initWithFrame:webFrame];
Затем просто загрузите webView в представление в viewWillAppear:
[viewWeb addSubview:webView];
Это действительно вопрос проектирования интерфейса, который быстрее краска непосредственно на представление или краска в подвью и затем нарисовать это подвью в представлении?
Ответ 5
Я решил эту проблему несколько лет назад, используя общий метод скрытия UIWebView за UIImageView, а затем удалив UIImageView после задержки.
Но он внезапно вернулся, я думаю, на iOS 7.0.4. Это происходило на совершенно новом iPad Air, а также на старом iPad mini non-retina. После двух дней вытягивания волос я наконец нашел обход.
Скажем, у вас есть веб-просмотр, который ограничен ориентацией ландшафта, инициализируется следующим образом:
WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.0f, 768.0f)];
И затем вы делаете его видимым после предварительной загрузки, например, например, bringSubviewToFront или setHidden: НЕТ на веб-просмотре (или, альтернативно, с помощью setHidden: YES или removeFromSuperview в UIImageView). Но вместо того, чтобы плавно переключать виды, вспышка и цвет фона мигают примерно полсекунды.
Исправление состоит в том, чтобы немного изменить размер вашего веб-представления:
WebView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024.01f, 768.0f)];
Проблема и исправление очень воспроизводимы. Он работает с небольшим изменением в четвертом знаке после запятой (1024.0001f). В пятом знаке после запятой (1024.00001f) вспышка возвращается. Значение высоты (768.0f) не имело значения.
Ответ 6
Или вместо того, чтобы обойти проблему, вы можете просто установить цвет фона вашего веб-сайта на любой цвет фона, который вы используете. Если вы не используете изображение, конечно.