         }
     }
 
-    func finishRefreshing() {
+    public func finishRefreshing() {
         // End Refreshing
         state = .Normal
         UIView.animate(withDuration: animateDuration) {

        }
    }

    var animateDuration: TimeInterval = 0.3

    private var isDragging = false

    init(refreshView: UIView, scrollView: UIScrollView) {
        super.init()
        refreshView.frame = CGRect(x: 0, y: -refreshView.frame.height, width: scrollView.frame.width, height: refreshView.frame.height)
        scrollView.addSubview(refreshView)
        self.refreshView = refreshView
        self.scrollView = scrollView

        scrollView.addObserver(self, forKeyPath: "contentOffset", options: [.new], context: nil)
    }


    func startRefreshing()
}

final class Refresher: NSObject {

    private let refreshView: UIView

    private let scrollView: UIScrollView

    public weak var delegate: RefresherDelegate?

    private(set) var state: RefreshState = .Normal {
        didSet (oldValue) {
