不同于WKWebview,wk是有自己的加载进度值的,我们可以直接通过kvo检测到,并显示到进度条内。

但如果我们为了适配ios7,只能使用UIWebview了,这里的加载进度,就比较尴尬了

所以我们的实现方式就是:模拟进度-俗称假进度。

实现原理:

自定义一个UIView的进度条,添加到Nav下方,给予两个方法:

1、startLoadingAnimation  开始加载

2、endLoadingAnimation  结束加载

开始加载,先动画模拟一个0.4s的加载,加载宽度为0.6倍屏幕宽度,动画结束,再0.4s实现,总共0.8倍的屏幕宽度。

结束动画,动画模拟1.0倍数的屏幕宽度,实现全部加载完成,并最后隐藏掉进度条。

代码:

.h文件

  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface WebviewProgressLine : UIView
  4.  
  5. //进度条颜色
  6. @property (nonatomic,strong) UIColor *lineColor;
  7.  
  8. //开始加载
  9. -(void)startLoadingAnimation;
  10.  
  11. //结束加载
  12. -(void)endLoadingAnimation;
  13.  
  14. @end

.m文件

  1. #import "WebviewProgressLine.h"
  2.  
  3. @implementation WebviewProgressLine
  4.  
  5. -(instancetype)initWithFrame:(CGRect)frame{
  6. self = [super initWithFrame:frame];
  7. if (self) {
  8. self.hidden = YES;
  9. self.backgroundColor = [UIColor whiteColor];
  10. }
  11. return self;
  12. }
  13.  
  14. -(void)setLineColor:(UIColor *)lineColor{
  15. _lineColor = lineColor;
  16. self.backgroundColor = lineColor;
  17. }
  18.  
  19. -(void)startLoadingAnimation{
  20. self.hidden = NO;
  21. self.width = 0.0;
  22.  
  23. __weak UIView *weakSelf = self;
  24. [UIView animateWithDuration:0.4 animations:^{
  25. weakSelf.width = KScreenWidth * 0.6;
  26. } completion:^(BOOL finished) {
  27. [UIView animateWithDuration:0.4 animations:^{
  28. weakSelf.width = KScreenWidth * 0.8;
  29. }];
  30. }];
  31.  
  32. }
  33.  
  34. -(void)endLoadingAnimation{
  35. __weak UIView *weakSelf = self;
  36. [UIView animateWithDuration:0.2 animations:^{
  37. weakSelf.width = KScreenWidth;
  38. } completion:^(BOOL finished) {
  39. weakSelf.hidden = YES;
  40. }];
  41. }
  42.  
  43. @end

webview页面使用:

  1. #import "webviewViewController.h"
  2. #import "WebviewProgressLine.h"
  3.  
  4. @interface webviewViewController ()<UIWebViewDelegate>
  5. @property (nonatomic,strong) UIWebView *webview;
  6. @property (nonatomic,strong) WebviewProgressLine *progressLine;
  7.  
  8. @end
  9.  
  10. @implementation webviewViewController
  11.  
  12. - (void)viewDidLoad {
  13. [super viewDidLoad];
  14. self.view.backgroundColor = [UIColor whiteColor];
  15.  
  16. self.webview = [[UIWebView alloc] initWithFrame:self.view.frame];
  17. self.webview.delegate = self;
  18. [self.view addSubview:self.webview];
  19.  
  20. self.progressLine = [[WebviewProgressLine alloc] initWithFrame:CGRectMake(, , KScreenWidth, )];
  21. self.progressLine.lineColor = [UIColor redColor];
  22. [self.view addSubview:self.progressLine];
  23.  
  24. NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
  25. [self.webview loadRequest:[NSURLRequest requestWithURL:url]];
  26.  
  27. }
  28.  
  29. -(void)webViewDidStartLoad:(UIWebView *)webView{
  30. [self.progressLine startLoadingAnimation];
  31. }
  32.  
  33. -(void)webViewDidFinishLoad:(UIWebView *)webView{
  34. [self.progressLine endLoadingAnimation];
  35. }
  36.  
  37. -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
  38. [self.progressLine endLoadingAnimation];
  39. }

由于内容比较简单,就不放Demo了,直接贴代码,大家可以试一下~

iOS7 UIWebview加载进度条实现的更多相关文章

  1. iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26

    1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...

  2. 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)

    // // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...

  3. css3 linear-gradient实现页面加载进度条效果

    最终效果图: html结构: <div>    <p class="p1">        <span></span>    < ...

  4. ajax页面加载进度条插件

    下面两个都是youtube视频的加载进度条效果的ajax插件 一.官网:http://ricostacruz.com/nprogress/官网 github:https://github.com/rs ...

  5. pace.js – 加载进度条插件

    这儿只是简单介绍一下这个插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容 ...

  6. 仿UC浏览器图片加载进度条

    前几天用UC浏览器看新闻(无意中给UC打了广告),看到它的图片加载进度条,正好最近有时间,所以就自己写了一个. 效果图如下 进度条的底色和填充颜色都可以调整. 首先中间的笑脸作为一个整体,其实现代码如 ...

  7. 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画

    之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...

  8. jQuery模拟页面加载进度条

    因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...

  9. js页面加载进度条

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 一个VLAN配置的实际例子

    背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样.     首先看一种硬件效率较高的方法: Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据 ...

  2. tcp_client.c tcp_server.c

    #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> ...

  3. MapReduce编程基础

    MapReduce编程基础 1. WordCount示例及MapReduce程序框架 2.  MapReduce程序执行流程 3.  深入学习MapReduce编程(1) 4. 参考资料及代码下载 & ...

  4. Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)

    引用计数和字符串 内存中的常量字符串的空间分配与其他对象不同,他们没有引用计数机制 凡是自定义的对象都有引用计数机制: OC内部中对象分为可变对象(NSMutableString等)和不可变对象(NS ...

  5. textarea自动增长宽高

    <script type="text/javascript"> $(function(){ $("#iptcont").bind("key ...

  6. Vue路由history模式踩坑记录:nginx配置解决404问题

    问题背景: vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使 ...

  7. Android -- ViewPager、Fragment、状态保存、通信

    工程架构                                                                                      TabAFm到Tab ...

  8. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  9. Drupal 通过API动态的加入样式文件

    前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...

  10. Office PPT如何切换到返回幻灯片

    1 如图所示,有"老师""同学""家人"三个板块,如果依次播放,将播放"老师1" "老师2" &qu ...