在加载网页时,一般头部都有一个显示进度的进度条视图。但这个进度并非是真实的进度,只是一个假的进度显示。它不能真实地反映网页加载的进度,只是给用户一个假象而已。苹果内置的浏览器的进度条是真实地反映网络的加载进度的,这个技术设计了苹果内部的底层的一些东西。我们可以研究,也可以用。不过如果你的应用用了,那么苹果公司就会拒绝你上架到AppStore。所以我们只能用一个假象来显示进度。
直接使用框架可以省去很多事情。当然你也可以自己写,用定时器不停地加载UIProgressView对象的progress值,当加载到一定值时移除定时器停止加载,并当加载完毕时把UIProgressView对象隐藏就可以了。
使用框架的方法:NJKWebViewProgress框架下载地址https://github.com/ninjinkun/NJKWebViewProgress
直接用CocoaPods安装即可
pod 'NJKWebViewProgress'
在需要用到的控制器导入头文件#import "NJKWebViewProgress.h"
遵守它的代理NJKWebViewProgressDelegate
创建进度代理对象和自己的UIProgressView对象
@property (weak, nonatomic) IBOutlet UIProgressView *progressView;
/** 进度代理对象 */
@property (nonatomic, strong) NJKWebViewProgress *progress;
在适当的位置加入以下代码
self.progress = [[NJKWebViewProgress alloc] init];//初始化对象
self.webView.delegate=self.progress;//把webView的代理设置成self.progress。这样才能监听它的进度
__weak typeof(self) weakSelf = self;//把self改成弱引用,这样就可以在block中使用。
self.progress.progressBlock = ^(float progress) {
weakSelf.progressView.progress = progress;//自己定义的进度条对象的进度值等于block返回的进度值。
NSLog(@"%f",progress);
weakSelf.progressView.hidden = (progress == 1.0);//当进度值为1时自己定义的进度条UIProgressView对象隐藏。
};
self.progress.webViewProxyDelegate = self;//把框架进度条代理对象内部的webViewProxyDelegate代理设置为控制器,这样才能用UIWebViewDelegate的代理方法。