     self.buttonView.addSubview(spinnerImageView)
   }
   
-  override func updateConstraints() {
-    super.updateConstraints()
-  }
-  
   // layoutSubviews is very useful to update the view's corner radius as it has available the view's 
   // size and position based on its constraints
-  override func layoutSubviews() {
+  public override func layoutSubviews() {
     self.updateCornerRadius()
     
     // I don't know if this is the best solution, but it seems to work out well in this example

import SnapKit


protocol FollowButtonDelegate: class {
  func didPressFollowButton(currentState: FollowButtonState)
}

internal enum FollowButtonState {
  case NotFollowing
  case Following
  case Loading
}

internal class FollowButton: UIView {
  
  internal struct FollowButtonOptions {
    internal let labelText: String
    internal let textColor: UIColor
    internal let backgroundColor: UIColor
    internal let showSpinner: Bool
    internal let showLabel: Bool
  }
  
  private enum FollowButtonTransition {

  
  // MARK: - Initialization
  // ------------------------------------------------------------
  public convenience init(withState state: FollowButtonState) {
    self.init(frame: CGRectZero)
    self.updateButtonToState(state)
  }
  
  public override init(frame: CGRect) {
    super.init(frame: frame)
    
    self.setupViewHierarchy()
    self.configureConstraints()
  }
  
  public required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
  }
  
