Skip to content

Instantly share code, notes, and snippets.

@dangthaison91
Last active June 1, 2016 09:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dangthaison91/ab28bf2056f6c8a7240d073d0fb1f563 to your computer and use it in GitHub Desktop.
Save dangthaison91/ab28bf2056f6c8a7240d073d0fb1f563 to your computer and use it in GitHub Desktop.
class ImperativeShortViewController: UIViewController {
private var timerCreator: TimerCreator
private var panPresent = false
private var rotatePresent = false
private var gestureTimer: TimerType?
private var secondsLeft = 3
private var tickCount = 0
init(timerCreator: TimerCreator) {
self.timerCreator = timerCreator
}
func handlePan(panGesture: UIPanGestureRecognizerType) {
if panGesture.state == .Began && self.panPresent == false {
self.panPresent = true
self.checkIfBothGesturesPresent()
} else if panGesture.state == .Ended {
self.panPresent = false
self.stopTimerIfNeeded()
}
}
func handleRotate(rotateGesture: UIRotationGestureRecognizerType) {
if rotateGesture.state == .Began && self.rotatePresent == false {
self.rotatePresent = true
self.checkIfBothGesturesPresent()
} else if rotateGesture.state == .Ended {
self.rotatePresent = false
self.stopTimerIfNeeded()
}
}
private func checkIfBothGesturesPresent() {
if self.rotatePresent == true && self.panPresent == true && self.gestureTimer == nil {
self.secondsLeft = 3
self.gestureTimer = timerCreator(interval: 1, repeats: true, onTick: { [weak self] sender in
self?.tick(sender)
})
delegate?.didStart()
}
}
private func stopTimerIfNeeded() {
if let gestureTimer = gestureTimer {
gestureTimer.invalidate()
self.gestureTimer = nil
self.tickCount = 0
delegate?.didComplete()
}
}
private func tick(timer: TimerType) {
if self.secondsLeft <= 0 {
self.stopTimerIfNeeded()
return
}
self.secondsLeft -= 1
delegate?.didTick(secondsLeft)
tickCount += 1
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment