覆盖检测触摸的UIView,处理它们并将它们发送到视图下方

时间:2016-07-18 12:35:43

标签: ios cocoa-touch overlay

我创建了一个应该处理所有触摸,滑动......的视图。此视图将始终位于所有其他视图的顶部,并将覆盖设备屏幕。我想要的是这个视图获取所有事件,以透明的方式处理它们。

我尝试过使用:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    NSSet *tmpTouches = [event allTouches];

    if (tmpTouches.count == 1)
        NSLog(@"1 tap detected");
    else if (tmpTouches.count == 2)
        NSLog(@"w tap detected");
    else if (tmpTouches.count == 3)
        NSLog(@"3 tap detected");

    UIView *hitTestView = [super hitTest:point withEvent:event];
    if (hitTestView) {
        hitTestView = nil;
    }
    return hitTestView;
}

但在事件中未检测到触摸

在下一个方法上,如果返回YES我可以使用- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event ...等,但是如何将触摸事件发送到下一个视图。如果返回NO该视图对系统是透明的,但我没有接触到任何内容..

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{   
    return NO;
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在主视图中引用子视图。使用touchesBegan等机制抓住你的触摸。在主视图中,直接调用子视图中应该处理thate事件的方法。换句话说,主视图吸收事件,然后在子视图中调用适当的方法。这比试图在两个视图之间分配事件更容易。