     }
     
     fileprivate func createTapEvent(forButton button: UIButton) -> Observable<Bool> {
-        return button.rx.tap.map { _ -> () in
+        return button.rx.tap.asObservable().filter { !self.isAnimating }.map { _ -> () in
+            self.isAnimating = true
             let isToRight = self.state == .left
             self.leftButtonAnimation = self.generateCompleteButtonAnimation(aView: self.leftButton, isToRight: isToRight)
             }.flatMap { _ -> Observable<Bool> in

        }
        self.leftButton.layoutIfNeeded()
        self.rightButton.layoutIfNeeded()
    }
    
    // MARK: - Animations

    let enterString: String
    let exitString: String
    var leftButtonAnimation: CAAnimationGroup!
    var isAnimating = false
    lazy var leftButton: UIButton = {
        let button = self.createButton()
        self.createTapEvent(forButton: button).subscribe(onNext: { _ in
