Подкласс UIControl - как остановить сенсорный поток событий?

Я пишу приложение для настольных игр (например, шахматы). Основное представление распознает жесты смахивания (UISwipeGestureRecognizer), запущенные в любом месте в полноэкранном режиме, в результате чего доска вращается.

Теперь я добавил прозрачное подпредставление квадратной формы точно над доской. Это подкласс UIControl, который обнаруживает прикосновения - как движения пешек по доске:

[self.view addSubview:self.boardControl]

Я ожидал, что жесты смахивания будут заблокированы в области экрана, которая покрыта подклассом UIControl. И это не так. Поэтому, когда я делаю быстрое касание и перетаскиваю (прокручиваю) поверх своего квадратного элемента Board Board, сначала он определяется как ход пешки, а затем снова определяется как удар, который вращает доску.

Как я могу сделать свой подкласс UIControl, чтобы блокировать поток сенсорных событий, запущенных в его кадре, к его суперпредставлениям?


Я могу предотвратить реагирование моего приложения на жесты смахиванием, отфильтровывая касания на уровне суперпредставления, либо:

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
    CGPoint location = [gestureRecognizer locationInView:self.view];
    CGRect frame = self.boardControl.frame;
    if ( CGRectContainsPoint(frame, location) )
        return NO;
    return YES;
}

или по:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
       shouldReceiveTouch:(UITouch *)touch
{
    CGPoint location = [touch locationInView:self.view];
    CGRect frame = self.boardControl.frame;
    if (CGRectContainsPoint(frame, location))
        return NO;
    return YES;
}

но я хочу решить эту проблему на один уровень раньше: я хочу, чтобы boardControl не пропускал ни одного из запущенных в их событиях касания фрейма, выше в иерархии представлений.

Может ли подкласс UIControl "покрыть" свой супервизор и "съесть" все прикосновения, которые он получает, так что суперпредставлению не нужно будет обращаться к своему фрейму, чтобы угадать, нужно ли отфильтровывать такое касание или нет?

1 ответ

Все, что вам нужно, это реализовать UIGestureRecognizerDelegate Это обеспечивает способ сделать запрошенные вещи.

Я думаю, что вы должны начать с gestureRecognizer:shouldReceiveTouch: Примеры

Другие вопросы по тегам