Вы можете создать подкласс UIView и переопределить - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
.
Этот метод вызывается очень рано в цепочке респондента и позволяет обнаружить касание в любом месте представления.
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
UIView *result = [super hitTest:point withEvent:event];
....
return result;
}
Как только вы обнаруживаете касание, вы сбрасываете таймер, так что либо новое событие касания наступает до того, как таймер сработает, либо сработает таймер.
Когда срабатывает таймер, вы выполняете свое конкретное действие.
За подобным подходом может следовать подкласс UIWindow
и затем переопределение -(void)sendEvent:(UIEvent *)event
.Преимущество этого состоит не в том, что он связан с представлением, а во всем окне вашего приложения и вызывается еще раньше в цепочке респондента.
- (void)sendEvent:(UIEvent *)event {
if ([self thisIsTheTouchIwaitedFor:event])
[self resetWaitTimer];
[super sendEvent:event];
}