ios13夜间模式

昨天和今天在继续制作我的健康养生项目。

1.在主页、知识两个界面给tableview赋上数据。

2.完善了一下夜间模式,修改了switch按钮的初始状态判断。

3.主页,知识两个界面点击cell后跳转到新的控制器,添加WKWebView,加载网页url。

4.加载网页,使用MBProgressHUD框架。在网页没加载完成时显示加载界面,网页加载完成后关闭加载界面。

WKWebView的代理有两种,UIDelegate和navigationDelegate两种,分别要遵循


1.这里我用到的是navigationDelegate,简单的学习了解了一下两种代理。

navigationDelegate主要是捕获webView的各种状态,例如判断是否可以加载该网页,开始加载网页,加载完成,加载中断等等,调用不同的方法就可以捕获不同的状态,并在方法里完成自己的操作。

UIDelegate简略地看了一下,都是关于与js交互的方法,现在暂时用不到。

这两种代理设置的时候没什么说的,就照常一样。webView.UIDelegate = self; 和 webView.navigationDelegate = self; 即可。


2.然后简单的用了一下MB框架。

-- (void)viewDidLoad {

    MBProgressHUD *HUB = [MBProgressHUD showMessage:@"玩命加载中..."];

    HUB.delegate=self;

}

//网页加载完成-代理方法navigationDelegate

- (void)webView:(WKWebView*)webViewdidFinishNavigation:(WKNavigation*)navigation{

    [MBProgressHUD hideHUD];

}

//代理方法-MBProgressHUDDelegate(这里监听HUD状态,如果隐藏了就将其移除,置空)

-(void)hudWasHidden:(MBProgressHUD *)hud{

    [hudremoveFromSuperview];

    hud =nil;

}

这里说一下自己犯的一个小错误,之前将HUD框架的showMassage方法写在了viewWillAppear方法中了,导致出现了一个小bug,就是第一次加载网页的时候,正常显示加载提示,加载完成就消失了。待点击tabbar切换控制器后再回来的时候,又会显示加载框,又因为第二次不用重新加载网页,监听网页加载完成的代理方法不会被调用,写在里面的取消提示框也不会执行,提示框就会一直显示,卡在那里。

以后要注意写在viewDidLoad方法中就没事了。


3.又发现了个问题,因为app里有些界面是加载网页的,个人界面中有一个table是显示缓存大小的,之前没加载网页的时候没有发现问题,加载网页之后,缓存数飞速增长,导致切换到个人界面的时候会卡住几秒,个人猜测是缓存越来越大,主线程阻塞,计算时间过长,导致UI界面加载慢。

解决方法:由于计算缓存大小的操作是在自定义的cell中实现的,没有计算完成,就不会加载UI界面,于是在自定义cell类中将计算缓存的操作放入子线程中执行,切换界面的时候就恢复流畅了。

注意点,只能将计算过程放入子线程中,给label赋值的步骤一定要放在主线程中。

你可能感兴趣的:(ios13夜间模式)