gpt4 book ai didi

ios - 每次启动时 UIWebView 白屏,同时预加载所有选项卡

转载 作者:行者123 更新时间:2023-12-01 17:39:03 26 4
gpt4 key购买 nike

在我提出我的问题之前,我想提一下我尝试寻找解决方案 herehere .
我正在创建一个使用 native UIWebView 的混合应用程序用于呈现响应式设计的 Web 应用程序。以下是问题描述:
1. 我有一个UITabBarController .
2.每个选项卡都有一个UIWebView .
3. 我必须预加载所有标签。
4. 我显示的是 UIActivityIndicator直到内容加载到第一个选项卡上。
5.出现白屏约 8-10 秒 然后内容开始出现。
我很高兴看到这次变成 2-4秒 .

以下是我的实现:

[self performSelectorOnMainThread:@selector(loadAllTabs) withObject:nil waitUntilDone:YES];

-(void) loadAllTabs
{
for(UIViewController * viewController in self.viewControllers){
if(![[NSUserDefaults standardUserDefaults]boolForKey:@"isSessionExpired"])
{
if((int)[self.viewControllers indexOfObject:viewController] != 4)
{
viewController.tabBarItem.tag = (int)[[self viewControllers] indexOfObject:viewController];
[viewController view];
}
}
}
}

在 WebView Controller 的 viewDidLoad我有 :
[_tgWebView loadRequest:[NSURLRequest requestWithURL:homeURL]];  

我很期待 suppressesIncrementalRendering ,但是由于我正在预加载所有选项卡,因此这不起作用。
由于我的应用支持 iOS 7+ ,因此 WKWebView不能在这里应用。
我也想到了 increasing启动图像持续时间,但了解到这不是一个好习惯。
这可以使用 来实现吗? GCD ?
请指出我的实现中的缺陷,以便我的应用程序具有更好的性能。

最佳答案

首先,隐藏每个选项卡上的 UIWebView 直到它完成加载,然后显示它。在 UIWebView 下方,您可以使用一些占位符图像来描述它的加载。然后使用 webViewDidFinishLoad 委托(delegate)方法在完成加载后显示 Web View 。这种方法将是非阻塞的。

- (void)webViewDidFinishLoad:(UIWebView *)webview
{
if (webview.isLoading)
return;
else
webView.hidden = false;
}

其次,预加载第一个选项卡,然后在显示第一个选项卡时加载后续选项卡。您可以通过将以下代码放在第一个选项卡 viewDidLoad 方法中来做到这一点:
// Preload the subsquent tabs
for (UIViewController *aVC in self.tabBarController.viewControllers)
if ([aVC respondsToSelector:@selector(view)] && aVC != self)
aVC.view;

这样,附加选项卡 Web View 以非阻塞方式在后台加载。您可以将其与在加载时隐藏 Web View 结合使用,以防用户在页面加载之前导航到其他选项卡。

我用三个标签对此进行了测试,效果很好。

所以第一个 View Controller 可能看起来像这样:
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];

// Load the website
[self loadWebView];

// Preload the subsquent tabs
for (UIViewController *aVC in self.tabBarController.viewControllers)
if ([aVC respondsToSelector:@selector(view)] && aVC != self)
aVC.view;
}

-(void)loadWebView
{
// Create Request
NSURL *url = [NSURL URLWithString:@"http://anandTech.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

// Load the page
[webView loadRequest:request];
}

- (void)webViewDidFinishLoad:(UIWebView *)webview
{
if (webview.isLoading)
return;
else
webView.hidden = false;
}

编辑:
删除了 GDC,因为当 View 具有 WebViews 时它会崩溃

关于ios - 每次启动时 UIWebView 白屏,同时预加载所有选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com