         }
     }
 
-    var animateDuration: TimeInterval = 0.3
+    public var animateDuration: TimeInterval = 0.3
 
     private var isDragging = false
 
-    init(refreshView: UIView, scrollView: UIScrollView) {
-        super.init()
+    public init(refreshView: UIView, scrollView: UIScrollView) {
         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
 
+        super.init()
         scrollView.addObserver(self, forKeyPath: "contentOffset", options: [.new], context: nil)
     }
 

    func startRefreshing()
}

class Refresher: NSObject {

    private var refreshView: UIView!

    private var scrollView: UIScrollView!

    weak var delegate: RefresherDelegate?

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

        }
    }

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