Обнаружение касания 3 пальцами во всем приложении, не затрагивая подпредставления

Я делаю приложение для iPad, в котором вы можете в любое время прокручивать / перемещать 3 пальца по всему экрану (отменить действие). Оно работает с UISwipeGestureRecognizer или UIPanGestureRecognizer, но подвиды под моими пальцами (например, UITableView или UIScrollview) получили прикосновение и движется. Чего я не хочу.

Моя идея заключалась в том, чтобы поместить прозрачный UIView поверх всего приложения, которое будет пересылать касания другим представлениям или нет. Я пробовал кое-что с hitTest, но думаю, что плохо его понял, так как возвращаемое количество касаний неверно и требует времени...

Большое спасибо, если вы можете помочь мне с этим :)

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    if (event.type == UIEventTypeTouches) {
        if (event.allTouches.count >= 2) {
            return self;
        }
    }
    return [super hitTest:point withEvent:event];
}

person florion    schedule 02.08.2012    source источник


Ответы (1)


Я думаю, вы должны использовать

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

делегат UIGestureRecognizer, чтобы определить, какие жесты допустимы одновременно.

E.g:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

    NSLog(@"gestRecogn: %@ otherGestRec: %@",[[gestureRecognizer class] className],[[otherGestureRecognizer class] className]);

    if ([[[gestureRecognizer class] className] isEqualToString:@"UIScrollViewPanGestureRecognizer"] && [[[otherGestureRecognizer class] className] isEqualToString:@"UILongPressGestureRecognizer"]) {
        return FALSE;
    }
    if ([[[gestureRecognizer class] className] isEqualToString:@"UILongPressGestureRecognizer"] && [[[otherGestureRecognizer class] className] isEqualToString:@"UIScrollViewPanGestureRecognizer"]) {
        return FALSE;
    }
    return TRUE;
}
person ingaham    schedule 02.08.2012