Project sample
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48  | 
						// this ALWAYS moves the view back to its original place     func handleTap(reg : UIGestureRecognizer) {         if(self.toMoveBackDown != 0) {             self.view.endEditing(true)             self.viewMoveDown(height: self.toMoveBackDown)         }     }     func animateTableView(delta: CGFloat, heightToRemember: CGFloat) {         var rect : CGRect = self.tableView.frame;         UIView.animate(withDuration: 0.3, animations: {             rect.origin.y       -= delta;             rect.size.height    += delta;             self.tableView.frame = rect;             self.tableView.scrollRectToVisible(rect, animated: true)         }) {(finished) in             self.toMoveBackDown = heightToRemember         }     }     func viewMoveUp(height: CGFloat) {         if(self.toMoveBackDown == 0) { // animate up iff we're at original position             print("move viewcontroller up")             animateTableView(delta: height, heightToRemember: height)         }     }     func viewMoveDown(height: CGFloat) {         if(self.toMoveBackDown > 0)  { // animate down iff we have moved up previously             print("move viewcontroller down")             animateTableView(delta: -height, heightToRemember: 0)         }     } override func viewDidLoad() {         super.viewDidLoad()         let tap:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(handleTap(reg : )))         tap.numberOfTapsRequired = 1         self.view.addGestureRecognizer(tap)     }  | 
					
swift 3
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						@IBOutlet var myView: UIView! override func viewDidLoad() {     super.viewDidLoad()     let tap = UITapGestureRecognizer(target: self, action:#selector(handleTap))     myView.addGestureRecognizer(tap) } func handleTap() {     print("tapped") }  | 
					
objective 
the delegate
| 
					 1 2 3 4 5 6  | 
						#pragma mark - Gesture delegate - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {     CGPoint pointOnScreen = [touch locationInView:nil];     return NO; // handle the touch }  | 
					
optional – handler
| 
					 1 2 3 4  | 
						- (void)handleTap:(UITapGestureRecognizer *)tapRecognizer {     CGPoint touchPoint = [tapRecognizer locationInView: self]; }  | 
					
| 
					 1 2 3  | 
						    UITapGestureRecognizer * theTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap:)];     theTapRecognizer.delegate = self;     [self addGestureRecognizer: theTapRecognizer];  |