In the touchesBegan: view touchesBegan: you can invoke your long descriptor with some delay.
[touchHandler performSelector:@selector(longTap:) withObject:nil afterDelay:1.5]
Then in sight touchesEnded: you can cancel this call if not enough time has passed:
[NSObject cancelPreviousPerformRequestsWithTarget:touchHandler selector:@selector(longTap:) object:nil];
source share