Last active
March 6, 2019 16:14
-
-
Save 0xWDG/20bd16cb5692573e28b870484b0a6860 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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