    @IBOutlet private weak var _finalTextLabel: UILabel!
    @IBOutlet private weak var _textLabel: UILabel!
    
+   private let _swipeRightRecognizer = UISwipeGestureRecognizer()
+   private let _swipeLeftRecognizer = UISwipeGestureRecognizer()
+   
    @IBOutlet private weak var _pageControlLayoutConstraint: NSLayoutConstraint! {
       didSet {
          if UIScreen.mainScreen().sizeType == .iPhone5 {

      })
   }
   
   @IBAction private func _nextButtonPressed()
   {
      if _pageControl.currentPage++ == _pageControl.numberOfPages - 1 {
         self.onboardingCompletionBlock?()
      }
      else {
         _updateUIForCurrentPage(_pageControl.currentPage)
      }
   }
   
   @IBAction private func _closeButtonPressed()

      self.onboardingCompletionBlock?()
   }
   
   // MARK: - Private
   private func _updateUIFromPageNumber(previousPageNumber: Int, toPageNumber currentPageNumber: Int)
   {
      guard currentPageNumber >= 0 && previousPageNumber != currentPageNumber else { return }
      
      if previousPageNumber == finalPageNumber && currentPageNumber < previousPageNumber
      {
         _animateFinalPageOutWithDuration(0.3, completion: { (finished) -> () in
            
            guard let image = self._screenImageForPageNumber(currentPageNumber) else { return }
            let attrText = NSAttributedString.attributedOnboardingStringForPageNumber(currentPageNumber)
            self._updateIPhoneScreenImage(image, duration: 0.3)
            self._updateMainTextLabelWithAttributedText(attrText, duration: 0.3)
            
            self._bottomSpacePhoneConstraint.constant = 0
            UIView.animateWithDuration(0.3, animations: { () -> Void in
               
               self._textLabel.alpha = 1
               self.view.layoutIfNeeded()
            })
         })
      }
      
      let attrText = NSAttributedString.attributedOnboardingStringForPageNumber(currentPageNumber)
      if currentPageNumber < finalPageNumber
      {
         guard let image = _screenImageForPageNumber(currentPageNumber) else { return }
         _updateIPhoneScreenImage(image, duration: 0.3)
         _updateMainTextLabelWithAttributedText(attrText, duration: 0.3)
      }
      else
      {
         _setupFinalPageContainerView()
         _animateFinalPageInWithDuration(0.6)
      }
   }
   
   private func _updateIPhoneScreenImage(image: UIImage, duration: NSTimeInterval)
   {
      UIView.transitionWithView(_phoneScreenImageView, duration: duration, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { () -> Void in
         self._phoneScreenImageView.image = image
         }, completion: nil)
   }
   
   private func _updateMainTextLabelWithAttributedText(text: NSAttributedString, duration: NSTimeInterval)
   {
      UIView.transitionWithView(_textLabel, duration: duration, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { () -> Void in
         self._textLabel.attributedText = text
         }, completion: nil)
   }
   
   private func _setupFinalPageContainerView()
   {
      _finalPageContainerView.alpha = 0
      _finalPageContainerView.center = CGPoint(x: view.center.x, y: view.center.y - 20)
      view.addSubview(_finalPageContainerView)
   }
   
   private func _removeFinalPageContainerView()
   {
      _finalPageContainerView.removeFromSuperview()
   }
   
   private func _animateFinalPageInWithDuration(duration: NSTimeInterval)
   {
      _bottomSpacePhoneConstraint.constant = -_phoneFrameImageView.bounds.height
      UIView.animateWithDuration(duration * 0.5, animations: { () -> Void in
         
         self._textLabel.alpha = 0
         self.view.layoutIfNeeded()
         self._nextButton.updateText("LET'S GO", color: UIColor.whiteColor())
         }, completion: { (finished) -> Void in
            
            UIView.animateWithDuration(duration * 0.5, animations: { () -> Void in
               self._finalPageContainerView.alpha = 1
            })
         }
      )
   }
   
   private func _animateFinalPageOutWithDuration(duration: NSTimeInterval, completion: ((finished: Bool) -> ())?)
   {
      UIView.animateWithDuration(duration, animations: { () -> Void in
         self._finalPageContainerView.alpha = 0
         }) { (finished) -> Void in
            self._removeFinalPageContainerView()
            completion?(finished: finished)
      }
   }

   private func _mainTextForPageNumber(number: Int) -> String?
   {
      switch number
