     
     
     // MARK: - Public functions
+    
+    public func showLoading() {
+        errorMessage = nil
+        loadingStackView.hidden = false
+        errorStackView.hidden = true
+        showing = true
+        showBanner()
+    }
+    
+    public func dismiss() {
+        dismissBanner()
+    }
     
     public func showError(message: String?) {
         errorMessage = message
         errorLabel.text = message
         errorStackView.hidden = false
         loadingStackView.hidden = true
-        shouldShow = true
-        configureShowing()
-    }
-    
-    
+        showing = true
+        showBanner()
+    }
 
 }
 


    // MARK: - Public properties
    
    @IBInspectable public var showing: Bool = false {
        didSet {
            shouldShow = showing
            configureShowing()
        }
    }
    
    @IBInspectable public var backgroundTint: UIColor = UIColor.blueColor().colorWithAlphaComponent(0.2) {
        didSet {
            updateColors()


private extension LoadingBanner {
    
    func showBanner(completion: (() -> ())? = nil) {
        updateColors()
        UIView.animateWithDuration(0.0, animations: {
            // This is a hack to get the banner to start in the right place
            }) { finished in
                if self.showing {
                    self.spinner.startAnimating()
                    self.heightConstraint.constant = self.height
                } else {
