gitHub上面有很多显示加载进度的框架,这里我们介绍一下KVNProgress框架,KVNProgress是一个可以完全定制的HUD(指示器),你可以设置加载进度的画面是否全屏,可以自己修改进度显示的风格,同时这个框架也支持在ipad上面使用,效果如下:

一、导入KVNProgress框架

  • 在github上面下载框架,并将相关的文件夹引入到项目中

  • 在工程中添加所需头文件
  1. #import "KVNProgress.h"

二、关键属性及方法介绍

  1. @property (nonatomic, getter = isFullScreen) BOOL fullScreen;//设置是否全屏显示
  2. + (void)show; //显示提示框
  3. + (void)showWithStatus:(NSString *)status; // 在图形的下方添加描述状态的文字
  4. + (void)showProgress:(CGFloat)progress; // 用0-1表示进度加载的%0-%100
  5. + (void)showProgress:(CGFloat)progress status:(NSString*)status; // 在显示进度的图形下面自定义一段文字
  6. + (void)showSuccessWithStatus:(NSString *)status;//显示加载成功
  7. + (void)showErrorWithStatus:(NSString *)status;//显示加载失败
  8. + (void)dismiss;//移除提示框
  9. + (void)updateStatus:(NSString*)status; //根据进度更新图形下方的文字
  10. + (void)updateProgress:(CGFloat)progress animated:(BOOL)animated; //更新此时加载的进度
  11. + (void)setConfiguration:(KVNProgressConfiguration *)newConfiguration;//设置进度视图的样式
  12. + (instancetype)defaultConfiguration;//默认图形样式

三、使用场景1:基本使用

  • 添加相关属性
  1. #import "ViewController.h"
  2. #import "KVNProgress.h"
  3. @interface ViewController ()
  4. //框架相关属性
  5. @property (nonatomic) KVNProgressConfiguration *basicConfiguration;//显示进度的图形为基本样式
  6. @property (nonatomic, strong) UIButton *basicBtn;//显示基本样式的按钮
  7. @end
  • 使用懒加载方式初始化用到的控件
  1. - (UIButton *)basicBtn{
  2. if (!_basicBtn) {
  3. _basicBtn = [[UIButton alloc] initWithFrame:CGRectMake(119, 136, 137, 30)];
  4. [_basicBtn setTitle:@"basic" forState:UIControlStateNormal];
  5. _basicBtn.backgroundColor = [UIColor grayColor];
  6. [_basicBtn addTarget:self action:@selector(basic) forControlEvents:UIControlEventTouchUpInside];
  7. [self.view addSubview:_basicBtn];
  8. }
  9. return _basicBtn;
  10. }
  11. - (void)viewDidLoad {
  12. [super viewDidLoad];
  13. [self myWebView];
  14. [self basicBtn];
  15. //设置加载进度图形的样式为基本样式
  16. [KVNProgress setConfiguration:self.basicConfiguration];
  17. //设置基本样式为默认的样式
  18. self.basicConfiguration = [KVNProgressConfiguration defaultConfiguration];
  19. }
  • 完成KVNProgress的相关设置
  1. - (void) basic{
  2. [KVNProgress show];
  3. //延时1秒以后移除提示框
  4. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  5. self.basicConfiguration.tapBlock = nil;
  6. [KVNProgress dismiss];
  7. });
  8. }

四、使用场景2:加载成功与加载错误

当我们登陆成功或者登陆失败之后,经常出现一个相关的提示框,如下图:

  • 添加相关属性
  1. @property (nonatomic, strong) UIButton *successBtn;
  2. @property (nonatomic, strong) UIButton *errorBtn;
  • 使用懒加载方式初始化用到的控件
  1. - (UIButton *)successBtn{
  2. if (!_successBtn) {
  3. _successBtn = [[UIButton alloc] initWithFrame:CGRectMake(119, 241, 137, 30)];
  4. [_successBtn setTitle:@"success" forState:UIControlStateNormal];
  5. _successBtn.backgroundColor = [UIColor grayColor];
  6. [_successBtn addTarget:self action:@selector(success) forControlEvents:UIControlEventTouchUpInside];
  7. [self.view addSubview:_successBtn];
  8. }
  9. return _successBtn;
  10. }
  11. - (UIButton *)errorBtn{
  12. if (!_errorBtn) {
  13. _errorBtn = [[UIButton alloc] initWithFrame:CGRectMake(119, 341, 137, 30)];
  14. [_errorBtn setTitle:@"error" forState:UIControlStateNormal];
  15. _errorBtn.backgroundColor = [UIColor grayColor];
  16. [_errorBtn addTarget:self action:@selector(error) forControlEvents:UIControlEventTouchUpInside];
  17. [self.view addSubview:_errorBtn];
  18. }
  19. return _errorBtn;
  20. }
  • 完成KVNProgress的相关设置
  1. - (void) success{
  2. [KVNProgress show];
  3. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  4. self.basicConfiguration.tapBlock = nil;
  5. //提示加载成功
  6. [KVNProgress showSuccessWithStatus:@"Success"];
  7. });
  8. }
  9. - (void) error{
  10. [KVNProgress show];
  11. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  12. self.basicConfiguration.tapBlock = nil;
  13. //提示加载失败
  14. [KVNProgress showErrorWithStatus:@"Error"];
  15. });
  16. }

五、使用场景3:复杂使用

在我们加载网页的时候,需要根据它的加载情况来改变提示框中的图形,如下图:

  • 添加相关属性及其代理协议
  1. @interface ViewController ()
  2. @property (nonatomic, strong) UIButton *complexBtn;
  3. @property (nonatomic, strong) UIWebView *myWebView;
  4. @end
  • 使用懒加载方式初始化用到的控件
  1. - (UIButton *)complexBtn{
  2. if (!_complexBtn) {
  3. _complexBtn = [[UIButton alloc] initWithFrame:CGRectMake(119, 441, 137, 30)];
  4. [_complexBtn setTitle:@"complex" forState:UIControlStateNormal];
  5. _complexBtn.backgroundColor = [UIColor grayColor];
  6. [_complexBtn addTarget:self action:@selector(complex) forControlEvents:UIControlEventTouchUpInside];
  7. [self.view addSubview:_complexBtn];
  8. }
  9. return _complexBtn;
  10. }
  11. - (UIWebView *)myWebView{
  12. if (!_myWebView) {
  13. _myWebView = [[UIWebView alloc] initWithFrame:self.view.bounds];
  14. NSURL *url = [NSURL URLWithString:@"http://www.hcios.com"];
  15. NSURLRequest *myRequest = [NSURLRequest requestWithURL:url];
  16. [_myWebView loadRequest:myRequest];
  17. _myWebView.delegate = self;
  18. [self.view addSubview:_myWebView];
  19. }
  20. return _myWebView;
  21. }
  • 完成KVNProgress的相关设置
  1. - (void) complex{
  2. //创建一个视图控制器用来显示webView
  3. UIViewController *myController = [[UIViewController alloc] init];
  4. //创建一个返回原来控制器的按钮
  5. UIButton *backBtn = [[UIButton alloc] initWithFrame:CGRectMake(10,10, 50, 50)];
  6. [backBtn setTitle:@"返回" forState:UIControlStateNormal];
  7. backBtn.backgroundColor = [UIColor redColor];
  8. [backBtn addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
  9. [self.myWebView addSubview:backBtn];
  10. [myController.view addSubview: self.myWebView];
  11. [self presentViewController:myController animated:YES completion:nil];
  12. }
  13. - (void) back{
  14. [self dismissViewControllerAnimated:YES completion:nil];
  15. }
  16. //在webView开始加载时候调用的函数里面设置相应的加载动画
  17. - (void)webViewDidStartLoad:(UIWebView *)webView{
  18. //开始加载,文字可以自定义
  19. [KVNProgress showProgress:0.0f
  20. status:@"加载中"];
  21. //延时0.2秒以后更新进度条显示加载到%50的位置
  22. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  23. [KVNProgress updateProgress:0.5f
  24. animated:YES];
  25. });
  26. //延时0.5秒以后修改图形下方的文字
  27. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  28. [KVNProgress updateStatus:@"请耐心等待"];
  29. });
  30. }
  31. //当webView加载完毕以后调用
  32. - (void)webViewDidFinishLoad:(UIWebView *)webView{
  33. //加载进度条显示加载完毕
  34. [KVNProgress updateProgress:1.0f
  35. animated:YES];
  36. //延时0.1秒以后隐藏加载进度的图形
  37. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  38. [KVNProgress dismiss];
  39. });
  40. }

六、KVNProgress和示例代码下载

KVNProgress框架

KVNProgress

提示框框架KVNProgress介绍的更多相关文章

  1. UWP中的消息提示框(二)

    在UWP中的消息提示框(一)中介绍了一些常见的需要用户主动去干涉的一些消息提示框,接下来打算聊聊不需要用户主动去干涉的一些消息提示框.效果就是像双击退出的那种提示框. 先说说比较简单的吧,通过系统To ...

  2. 第三方框架MBProgressHUD-----实现各种提示框

    程序运行显示如下 : 点击按钮实现对应的提示框: 这里只截取了其中一张图,有兴趣的可以自己运行程序,查看其他的几种提示框哟!!! 第三方框架MBProgressHUD的下载地址:https://git ...

  3. 基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

    在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验,Bootstrap开发也一样,我们往往在页面新增.编辑.查看详细等界面使用弹出对话框层的方式进 ...

  4. PHP弹出提示框并跳转到新页面即重定向到新页面

    本文为大家介绍下使用PHP弹出提示框并跳转到新页面,也就是大家所认为的重定向,下面的示例大家可以参考下   这两天写一个demo,需要用到提示并跳转,主要页面要求不高,觉得没必要使用AJAX,JS等, ...

  5. ASP.NET 使用AJAX让GridView的数据行显示提示框(ToolTip)

    介绍ASP.NET AJAX可以使你的web应用程序具有更丰富的功能和更多的用户响应. 本文中,我将演示如何通过ASP.NET AJAX的帮助,给像GridView这样的数据绑定控件的数据行增加pop ...

  6. Bootstrap提示框

    前面的话 提示框是一个比较常见的功能,一般来说是鼠标移动到特定元素上时,显示相关的提示语.本文将详细介绍Bootstrap提示框 基本用法 Bootstrap框架中的提示框,结构非常简单,常常使用的是 ...

  7. .Net Core应用框架Util介绍(四)

    上篇介绍了Util Angular Demo的目录结构和运行机制,本文介绍Util封装Angular的基本手法及背后的动机. Angular应用由Ts和Html两部分构成,本文介绍第一部分. Angu ...

  8. (转)基于Metronic的Bootstrap开发框架经验总结(6)--对话框及提示框的处理和优化

    http://www.cnblogs.com/wuhuacong/p/4775282.html 在各种Web开发过程中,对话框和提示框的处理是很常见的一种界面处理技术,用得好,可以给用户很好的页面体验 ...

  9. JS组件系列——Bootstrap寒冬暖身篇:弹出框和提示框效果以及代码展示

    前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑.在增加用户体验方面,弹出框和提示框起着重要的作用,如果你的 ...

随机推荐

  1. FPGA与CPLD的概念及其区别

    一.FPGA与CPLD的基本概念 1.CPLD CPLD主要是由可编程逻辑宏单元(LMC,Logic Macro Cell)围绕中心的可编程互连矩阵单元组成,其中LMC逻辑结构较复杂,并具有复杂的I/ ...

  2. 64_q2

    qt3-3.3.8b-69.fc26.x86_64.rpm 13-Feb-2017 01:37 3591906 qt3-MySQL-3.3.8b-69.fc26.i686.rpm 13-Feb-201 ...

  3. 设计模式之笔记--解释器模式(Interpreter)

    解释器模式(Interpreter) 定义 解释器模式(Interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 类图 描述 Expr ...

  4. 设计模式之笔记--代理模式(Proxy)

    代理模式(Proxy) 定义 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 类图 描述 Subject,定义了ConcreteSubject和Proxy的共用接口,这样就可以 ...

  5. spring中的任务调度Quartz

    Spring 整合 Quartz 任务调度 主要有两种方式. Quartz的官网:http://www.quartz-scheduler.org/ 这两种只是一些配置文件简单配置就OK了,但是根本无法 ...

  6. Crypt加密函数简介(C语言)

    定义函数 char * crypt (const char *key,const char * salt); 函数说明 crypt是个密码加密函数,它是基于Data Encryption Standa ...

  7. deep learning 资源汇总

    不定时更新..... 首先是吴老爷子在优酷的视频,可惜外音太大了:http://list.youku.com/albumlist/show?id=21508721&ascending=1&am ...

  8. <node.js爬虫>制作教程

    前言:最近想学习node.js,突然在网上看到基于node的爬虫制作教程,所以简单学习了一下,把这篇文章分享给同样初学node.js的朋友. 目标:爬取 http://tweixin.yueyishu ...

  9. Python全栈开发之7、模块和几种常见模块以及format知识补充

    一.模块的分类 Python流行的一个原因就是因为它的第三方模块数量巨大,我们编写代码不必从零开始重新造轮子,许多要用的功能都已经写好封装成库了,我们只要直接调用即可,模块分为内建模块.自定义的模块. ...

  10. Robot Framework + Selenium2Lib

    Robot Framework + Selenium2Lib 最近一段时间,公司在推行自动化测试流程,本人有幸参与了自定义通用控件的关键字封装和脚本辅助编写.数据驱动管理.测试用例执行管理等一系列工具 ...