iOS7 UIWebview加载进度条实现
不同于WKWebview,wk是有自己的加载进度值的,我们可以直接通过kvo检测到,并显示到进度条内。
但如果我们为了适配ios7,只能使用UIWebview了,这里的加载进度,就比较尴尬了
所以我们的实现方式就是:模拟进度-俗称假进度。
实现原理:
自定义一个UIView的进度条,添加到Nav下方,给予两个方法:
1、startLoadingAnimation 开始加载
2、endLoadingAnimation 结束加载
开始加载,先动画模拟一个0.4s的加载,加载宽度为0.6倍屏幕宽度,动画结束,再0.4s实现,总共0.8倍的屏幕宽度。
结束动画,动画模拟1.0倍数的屏幕宽度,实现全部加载完成,并最后隐藏掉进度条。
代码:
.h文件
- #import <UIKit/UIKit.h>
- @interface WebviewProgressLine : UIView
- //进度条颜色
- @property (nonatomic,strong) UIColor *lineColor;
- //开始加载
- -(void)startLoadingAnimation;
- //结束加载
- -(void)endLoadingAnimation;
- @end
.m文件
- #import "WebviewProgressLine.h"
- @implementation WebviewProgressLine
- -(instancetype)initWithFrame:(CGRect)frame{
- self = [super initWithFrame:frame];
- if (self) {
- self.hidden = YES;
- self.backgroundColor = [UIColor whiteColor];
- }
- return self;
- }
- -(void)setLineColor:(UIColor *)lineColor{
- _lineColor = lineColor;
- self.backgroundColor = lineColor;
- }
- -(void)startLoadingAnimation{
- self.hidden = NO;
- self.width = 0.0;
- __weak UIView *weakSelf = self;
- [UIView animateWithDuration:0.4 animations:^{
- weakSelf.width = KScreenWidth * 0.6;
- } completion:^(BOOL finished) {
- [UIView animateWithDuration:0.4 animations:^{
- weakSelf.width = KScreenWidth * 0.8;
- }];
- }];
- }
- -(void)endLoadingAnimation{
- __weak UIView *weakSelf = self;
- [UIView animateWithDuration:0.2 animations:^{
- weakSelf.width = KScreenWidth;
- } completion:^(BOOL finished) {
- weakSelf.hidden = YES;
- }];
- }
- @end
webview页面使用:
- #import "webviewViewController.h"
- #import "WebviewProgressLine.h"
- @interface webviewViewController ()<UIWebViewDelegate>
- @property (nonatomic,strong) UIWebView *webview;
- @property (nonatomic,strong) WebviewProgressLine *progressLine;
- @end
- @implementation webviewViewController
- - (void)viewDidLoad {
- [super viewDidLoad];
- self.view.backgroundColor = [UIColor whiteColor];
- self.webview = [[UIWebView alloc] initWithFrame:self.view.frame];
- self.webview.delegate = self;
- [self.view addSubview:self.webview];
- self.progressLine = [[WebviewProgressLine alloc] initWithFrame:CGRectMake(, , KScreenWidth, )];
- self.progressLine.lineColor = [UIColor redColor];
- [self.view addSubview:self.progressLine];
- NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
- [self.webview loadRequest:[NSURLRequest requestWithURL:url]];
- }
- -(void)webViewDidStartLoad:(UIWebView *)webView{
- [self.progressLine startLoadingAnimation];
- }
- -(void)webViewDidFinishLoad:(UIWebView *)webView{
- [self.progressLine endLoadingAnimation];
- }
- -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
- [self.progressLine endLoadingAnimation];
- }
由于内容比较简单,就不放Demo了,直接贴代码,大家可以试一下~
iOS7 UIWebview加载进度条实现的更多相关文章
- iOS UIWebView 加载进度条的使用-WKWebView的使用,更新2017.6.26
1.由于项目中加载网络插件,直接使用了webview加载.使用了三方NJKWebViewProgress进度条的使用,近期在测试时发现,网络缓慢时出现白屏,有卡顿现象. 于是采用了WKWebView进 ...
- 一个KVO 实现WKWebView加载进度条的例子 (注意最后移除观察者)
// // OpenWebViewController.m // Treasure // // Created by 蓝蓝色信子 on 16/7/29. // Copyright © 2016年 GY ...
- css3 linear-gradient实现页面加载进度条效果
最终效果图: html结构: <div> <p class="p1"> <span></span> < ...
- ajax页面加载进度条插件
下面两个都是youtube视频的加载进度条效果的ajax插件 一.官网:http://ricostacruz.com/nprogress/官网 github:https://github.com/rs ...
- pace.js – 加载进度条插件
这儿只是简单介绍一下这个插件pace.js. 在页面中引入Pace.js,页面就会自动监测你的请求(包括Ajax请求),在事件循环滞后,会在页面记录加载的状态以及进度情况.此插件的兼容性很好,可以兼容 ...
- 仿UC浏览器图片加载进度条
前几天用UC浏览器看新闻(无意中给UC打了广告),看到它的图片加载进度条,正好最近有时间,所以就自己写了一个. 效果图如下 进度条的底色和填充颜色都可以调整. 首先中间的笑脸作为一个整体,其实现代码如 ...
- 【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画
之前向大家介绍8款优秀的 jQuery 加载动画和进度条插件,今天这篇文章向大家推荐10个纯 CSS3 代码实现精美加载进度条动画效果的方案.加载动画和进度条在网站和 Web 应用中的使用非常流行,特 ...
- jQuery模拟页面加载进度条
因为我们无法通过任何方法获取整个页面的大小和当前加载了多少,所以想制作一个加载进度条的唯一办法就是模拟.那要怎么模拟呢? 我们知道,页面是从上往下执行的,也就是说我们可以大致估算出在页面的某个位置加载 ...
- js页面加载进度条
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- 一个VLAN配置的实际例子
背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样. 首先看一种硬件效率较高的方法: Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据 ...
- tcp_client.c tcp_server.c
#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> ...
- MapReduce编程基础
MapReduce编程基础 1. WordCount示例及MapReduce程序框架 2. MapReduce程序执行流程 3. 深入学习MapReduce编程(1) 4. 参考资料及代码下载 & ...
- Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)
引用计数和字符串 内存中的常量字符串的空间分配与其他对象不同,他们没有引用计数机制 凡是自定义的对象都有引用计数机制: OC内部中对象分为可变对象(NSMutableString等)和不可变对象(NS ...
- textarea自动增长宽高
<script type="text/javascript"> $(function(){ $("#iptcont").bind("key ...
- Vue路由history模式踩坑记录:nginx配置解决404问题
问题背景: vue-router 默认是hash模式,使用url的hash来模拟一个完整的url,当url改变的时候,页面不会重新加载.但是如果我们不想hash这种以#号结尾的路径时候的话,我们可以使 ...
- Android -- ViewPager、Fragment、状态保存、通信
工程架构 TabAFm到Tab ...
- MongoDB学习笔记(五)--复制集 && sharding分片
主从复制 主从节点开启 主节 ...
- Drupal 通过API动态的加入样式文件
前面几篇文章中讲到关于样式的载入方式.已经了解到能够通过 theme.info 载入样式文件,但都须要更新缓存才干够使用.因些这样子没有办法动态的载入一些样式文件,在DP中提供了两个API操作样式文件 ...
- Office PPT如何切换到返回幻灯片
1 如图所示,有"老师""同学""家人"三个板块,如果依次播放,将播放"老师1" "老师2" &qu ...