1.自定义刷新控件 -控制逻辑
- 创建JYRefreshControl 基于UIControl 控制逻辑判断
2.自定义刷新控件视图 -控制界面显示或者动画
-
创建XIB实现UI view布局,通过control 得到父视图高度控制view的变化
3. JYRefreshControl
-
初始化init方法,创建UI,此时没有设置高度,没有frame
-
创建scrollview 记录父视图
-
创建refreshView负责视图展示
init(){ super.init(frame: CGRect()) setupUI() } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder); setupUI() } 复制代码
-
设置刷新状态的枚举
-
重写父类的方法willMove toSuperView 上记录父视图,添加观察者
-
重写父类的移除视图的时候移除观察者
-
实现KVO 方法,根据监听到的父视图的滑动,设置view的frame,把高度传到refreshView中
-
根据滑动的高度,设置frame
-
在拖拽的时候进行状态判断
-
不在拖拽的时候,状态是拖拽了,松手刷新,状态设置为刷新,执行beginRefreshing
-
beginRefreshing()
方法 -
endRefreshing()
方法
4.JYNomalRefreshView
-
init 方法 加载loadnib 方法
-
nibName 可以是子类,通过nibName 的改变切换不同的显示内容,在View 的拖出来的视图,是可选的,子类不一定有
-
在state的didset方法中设置UI
-
ios 中旋转动画默认是 1.顺时针的旋转, 2.就近原则
-
实现同方向旋转,减少一个极小的值
-
如果旋转360,使用CABaseAnimation动画
5.刷新动画
-
awakeFromNib() 进行动画的执行
-
通过2张图片合成,实现1张GIF效果
-
使用
CABasicAnimation
动画实现无限旋转 -
实现
CGAffineTransform
缩放动画,设置layer的锚点,先设置center,或者frame,再设置锚点,