iOS开发之自己封装一个progressHUD控件
看了几个轻量级的progress view
我觉得KVNProgress做的最漂亮吧
突然我想为什么我自己不封装一个控件
然后我研究了一下KVNProgress
KVN简单的界面是由storyboard搭建的

调用了最简单的showWithStatus,然后用Reveal查看了一下

然后看了Xcode的结构才发现,Loading View 本来是UIView,但是继承自UIImageView,所以在Reveal中显示UIImageView
再来看一下分层结构

父视图本来是UIView
然后我就开始模仿写一个
我是想用纯代码搭建界面,到时候调用的时候只需要使用一个类文件
我们先来看动画实现部分
刚开始看KVNProgress的时候我还以为他是使用图片搭建的界面
成功

失败

进度

查看了他的代码才发现,根本没有图片,全是用纯代码做的动画
用的是 贝塞尔曲线 做的。 又学到东西了。
/*其实刚开始我的思路是用图形上下文画个圈,然后用一个圆圈动画的遮罩那部分缺掉的部分
最后可以实现这个动画 但是封装起来效果达不到 所以实现我还是用贝塞尔曲线做 */
思路是用贝塞尔曲线画一个有缺口的圆,然后让这个有缺口的圆转动起来
创建一个带缺口的圆

创建一个路径 Center是中心,radius是半径,startAngle是开始的角度,endAngle是结束的角度,clockwise的顺时针
再把创建好的贝塞尔路径设置属性

设置颜色,strokeColor边缘的颜色,fillColor是中间填充的颜色,lineWidth是线段的粗细
参数我用的都是KVN的参数
然后再添加进去

这时候就创建了一个有缺口的圆了

这时候我们要让他开始转动
用CABasicAnimation

animationWithKeyPath:@"transform.rotation.z" 意思是让Z轴转动,即X和Y轴不转
rotationAniamtionDuration是动画的速度
toValue是变成什么值,repeatCount是重复的次数

然后把动画添加到圆圈视图的layer
还有 我是用代码创建的界面 所以要记得把圆圈视图add到父视图
这样动画就做好了
剩下的几个动画也是用贝塞尔曲线做到,这里就不详细说了
说下封装
我觉得一个progress view的基本功能就是 要显示loading的时候 当然不能少文字说明
还有就是成功和失败的时候
所以我封装了这几种方法

然后创建单例
再创建一个方法
让所有类方法 通过单例调用这个实例方法

这个实例方法的作用就是判断需要哪一种动画
接下来就在每个方法里实现动画就行了

还有KVN没有提供视图的一些自定义方法
我这里也举一些例子
例如我要改变圆圈的线的粗细,或者颜色,控制动画的速度
这时候我定义类方法
再通过单例赋值就行了

这样就封装完了
我看了一下 这一个类才22KB 非常非常小 而且实现了这么多动画效果
iOS开发之自己封装一个progressHUD控件的更多相关文章
- iOS开发UI篇—使用picker View控件完成一个简单的选餐应用
iOS开发UI篇—使用picker View控件完成一个简单的选餐应用 一.实现效果 说明:点击随机按钮,能够自动选取,下方数据自动刷新. 二.实现思路 1.picker view的有默认高度为162 ...
- iOS开发UI篇—Quartz2D(自定义UIImageView控件)
iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一.实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义 ...
- uinty3d使用ugui封装一个分页控件
我们在显示数据时有的数据比较多,手机内存有限,我们不可能分配很多的控件来显示这些数据,分页是一个不错的选择.比如玩家交易行.我们现在封装一个自己简单的分页控件来显示玩家交易行. 分页控件的原理其实很简 ...
- ios开发中经常用到的控件
以下是按照使用频率对ios的控件进行罗列. 1.最常用的UI控件: UIButton (按钮).UILabel (文本标签).UITextField (文本输入框).UIImageView( 图片显示 ...
- IOS开发学习笔记019-动态创建控件
动态创建控件 一.按钮 二.文本输入框 三.lable标签 注意: 只是简单的拖拽控件会毁了你,所以最好还是手动通过代码创建控件. 如果要通过代码生成按钮的话,可以在系统自带的函数viewDidLoa ...
- iOS开发小技巧--UIScrollView内部子控件添加约束的注意点
注意:用UIScrollView时布局子控件的时候,不要相对于UIScrollView来添加约束,这样做不是设置子控件的位置,反而是设置了UIScrollView的contentSize 子控件的尺寸 ...
- iOS 开发中中 textView 作为子控件点击输入文本,然后退出文本的方式
方式1. 使用当双击输入的时候弹出键盘同时,使用手势和通知监听键盘的方法实现 代码如下: 1. 监听键盘通知 [[NSNotificationCenter defaultCenter] addObse ...
- IOS开发-UI学习-UIImageView控件
在页面上展现本地图片: // 使用本地图片 // 先初始化UIImageView myImageV = [[UIImageView alloc]initWithFrame:CGRectMake(, , ...
- IOS开发之纯代码界面--基本控件使用篇 ┊
http://www.cocoachina.com/bbs/read.php?tid=131516
随机推荐
- floyed算法
Floyed算法(实际是动态规划问题) 问题:权值矩阵matrix[i][j]表示i到j的距离,如果没有路径则为无穷 求出权值矩阵中任意两点间的最短距离 分析:对于每一对定点u,v看是否存在一个点w使 ...
- 第五节 Code 128 码
128码开始於1981年推出,是一种长度可变.连续性的字母数字条码.与其他一维条码比较起来,128码是较为复杂的条码系统,而其所能支援的字元也相对地比其他一维条码来得多,又有不同的编码方式可供交互运用 ...
- Maven Jrebel 多模块热部署方案
近期在构建maven多模块项目时,发现web module依赖的其它模块,每次都要clean install成一个jar包,然后运行web module才能加载. 本生jrebel是配置在了web m ...
- 基于visual Studio2013解决C语言竞赛题之0408素数
题目 解决代码及点评 判断一个数是不是素数的方法,一般是看n是不是能被n以内的某个整数(1除外)整除 为了提高效率,这个整数范围一般缩小到n的平方根 如果在这个范围内的整数都不能整除,那么 ...
- 第三种:NSOperationQueue
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typica ...
- 介绍一款开源的类Excel电子表格软件
Excel一直以霸主的地位,占领了Windows桌面表格软件市场No 1,与此同一时候,Office套装产品差点儿成为了IT行业的标配办公技能.有无相似Excel的桌面程序,绿色版,实现主要的数 ...
- gdal库的三个使用心得
作者:朱金灿 来源:http://blog.csdn.net/clever101 最近使用gdal库比较多,就谈谈gdal库的一些使用心得. 第一个是GDALOpen的访问权限参数会影响图像的创建金字 ...
- stm32之中断系统
概述: 提供中断控制器,用于总体管理异常,称之为“嵌套向量中断控制器:Nested Vectored Interrupt Controller (NVIC) VIC:中断管理器: NVIC:内嵌中断管 ...
- 代理丶通知丶KVO之间区别和各自优势
文/OyeOnoOmg(简书作者)原文链接:http://www.jianshu.com/p/75d3fd218a23著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 今天在网上看到一个 ...
- enum型常量
就像结构体一样,定义一个枚举类型是不分配内存的,仅仅是定义了一个类型的名字,下面可以使用这个名字定义枚举类型的变量 枚举即将变量的值一一列举出来变量的值只限于列举出来的值得范围内 简单的应用如下 #i ...