Skip to content

Instantly share code, notes, and snippets.

@0xWDG
Last active March 6, 2019 16:14
Show Gist options
  • Select an option

  • Save 0xWDG/20bd16cb5692573e28b870484b0a6860 to your computer and use it in GitHub Desktop.

Select an option

Save 0xWDG/20bd16cb5692573e28b870484b0a6860 to your computer and use it in GitHub Desktop.
import Foundation
import UIKit
// Extend UIView
extension UIView {
/// Setup a struct for saving the gesture handlers
struct gestureHandler {
/// Gesture "Up"
static var up: (()->())? = nil
/// Gesture "Down"
static var down: (()->())? = nil
/// Gesture "Left"
static var left: (()->())? = nil
/// Gesture "Right"
static var right: (()->())? = nil
}
/**
* Add a swipe action to UIView
*
* - Parameter swipeDirection: `.up`,`.down`,`.left`,`.right`
* - Parameter completionHandler: The completionhandler.
*/
func swipeAction(
swipeDirection: UISwipeGestureRecognizer.Direction,
completionHandler: @escaping ()->()
) {
/// Add swipe handler
let swiper = UISwipeGestureRecognizer(
// UIView is the target
target: self,
// invokeTarget is our responder
action: #selector(self.invokeTarget(_:))
)
// Set the direction of the swipe handler
swiper.direction = swipeDirection
// Add the gesture recognizer to the view
self.addGestureRecognizer(swiper)
// Switch between directions,
// Save it to our struct.
switch swipeDirection {
case .up:
// Save the completionHandler to gestureHandler.up
gestureHandler.up = completionHandler
case .down:
// Save the completionHandler to gestureHandler.down
gestureHandler.down = completionHandler
case .left:
// Save the completionHandler to gestureHandler.left
gestureHandler.left = completionHandler
case .right:
// Save the completionHandler to gestureHandler.right
gestureHandler.right = completionHandler
default:
print("Nothing")
}
}
/**
* Respond to a swipe action from UIView
*
* - Parameter gesture: The UIGestureRecognizer
*/
@objc func invokeTarget(_ gesture: UIGestureRecognizer?) {
/// Unwrap the swipeGesture
if let swipeGesture = gesture as? UISwipeGestureRecognizer {
// Switch between the direction
switch swipeGesture.direction {
case .up:
/// Unwrap gestureHandler.up if possible
guard let execute = gestureHandler.up else {
return
}
execute()
break;
case .down:
/// Unwrap gestureHandler.down if possible
guard let execute = gestureHandler.down else {
return
}
execute()
break;
case .left:
/// Unwrap gestureHandler.left if possible
guard let execute = gestureHandler.left else {
return
}
execute()
break;
case .right:
/// Unwrap gestureHandler.right if possible
guard let execute = gestureHandler.right else {
return
}
execute()
break;
default:
print("N/A")
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment