在我提出我的问题之前,我想提到我试图寻找解决方案here和here。
我正在创建一个混合应用程序,它使用本机UIWebView来呈现响应性设计的web应用程序。以下是问题说明:
UITabBarController。UIWebView。UIActivityIndicator。以下是我的执行情况:
[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控制器的viewDidLoad中有:
[_tgWebView loadRequest:[NSURLRequest requestWithURL:homeURL]]; 我期待suppressesIncrementalRendering,但由于我预装所有标签,这是行不通的。因为我的应用程序支持iOS 7+,所以WKWebView不能在这里应用。
我还想到了increasing,发布图像的持续时间,但了解到这将不是一个好的做法。
这能用GCD实现吗?
请指出我的实现中的缺陷,这样我的应用程序才能获得更好的性能。
发布于 2015-02-10 13:20:43
This帖子让我过了一天。我现在为此使用了NSNotificationCenter。
发布于 2015-02-02 09:51:59
首先,在每个选项卡上隐藏UIWebView,直到它完成加载,然后显示它。在UIWebView下面,您可以有一些占位符图像来描述它的加载。然后使用webViewDidFinishLoad委托方法在完成加载后显示web视图。这种方法将是非阻塞的。
- (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视图将以非阻塞的方式加载到后台。您可以将其与隐藏web视图结合起来,同时加载,以防用户在加载页面之前导航到其他选项卡。
我用三个标签测试了它,它运行得很好。
因此,第一个视图控制器可以如下所示:@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;
}编辑:当视图有WebViews时,删除了GDC,因为它正在崩溃。
发布于 2015-02-04 13:00:51
很难直接找出问题的所在。
首先,我建议您检查您的网络连接,方法是将页面加载到同一Wifi上的桌面计算机上,以查看服务器是否太慢。
此外,您还可以一个接一个地加载页面,而不是同时加载所有页面,因为多个HTTP请求没有按FIFO顺序处理,它们可能会被无序处理,并且您的页面可能需要在显示之前加载所有资源。
你控制你自己的网页吗?您可以使用safari检查器检查您的网页,查看所花费的时间、资源加载、javascript处理或呈现。
https://stackoverflow.com/questions/28272576
复制相似问题