原理是利用KVO在willMovetoSuperview和removeFromSuperview分别增加和删除属性监视,代码如下
//
// TGRefreshCtl.swift
// refresh
//
// Created by targetcloud on 2017/2/22.
// Copyright © 2017年 targetcloud. All rights reserved.
//
import UIKit
private let TGRefreshOffset:CGFloat = 60
enum TGRefreshState {
case normal//普通状态,什么都不做
case pulling//超过临界点,如果放手,开始刷新
case willRefresh//超过临界点,并且放手
}
class TGRefreshCtl: UIControl {
private weak var scrollV: UIScrollView?
private lazy var refreshV = TGRefreshV.refreshView()
init() {
super.init(frame: CGRect())
setupUI()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupUI()
}
override func willMove(toSuperview newSuperview: UIView?) {
super.willMove(toSuperview: newSuperview)
guard let sv = newSuperview as? UIScrollView else {
return
}
scrollV = sv
scrollV?.addObserver(self, forKeyPath: "contentOffset", options: [], context: nil)
}
override func removeFromSuperview() {
superview?.removeObserver(self, forKeyPath: "contentOffset")
super.removeFromSuperview()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, chan