自定义刷新控件

266 阅读1分钟

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,再设置锚点,