Распознать жест, которого нет в определенном подпредставлении - PullRequest
1 голос
/ 17 июня 2011

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

Я думал, что мог бы добиться этого с двумя GestureRecognizer, используя requireGestureRecognizerToFail,Тем не менее, GestureRecognizer родительского представления никогда не срабатывает.Почему это так?

Вот пример демонстрационного теста:

-(void)viewDidLoad {

    UIView *miniView = [[[UIView alloc] initWithFrame:CGRectMake(100,100,20,20)] autorelease];
    miniView.backgroundColor = [UIColor redColor];
    [self.view addSubview:miniView];

    // triggered when you tap the miniView
    UITapGestureRecognizer *miniTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(miniTap:)] autorelease];
    [miniView addGestureRecognizer:miniTap];

    // expected: triggered when you tap anywhere outside the mini-view
    // actual: never triggered!
    UITapGestureRecognizer *nonMiniTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(nonMiniTap:)] autorelease];
    [nonMiniTap requireGestureRecognizerToFail:miniTap];
    [self.view addGestureRecognizer:nonMiniTap];


    [super viewDidLoad];
}


-(void)miniTap:(id)sender { NSLog(@"miniTap"); }

-(void)nonMiniTap:(id)sender { NSLog(@"nonMiniTap"); }

Почему requireGestureRecognizerToFail: предотвращает запуск nonMiniTap когда-либо?Можно ли заставить его вести себя ожидаемым образом?

1 Ответ

2 голосов
/ 17 июня 2011

Если вы видите документацию для requireGestureRecognizerToFail:, ясно указывается, что состояние жеста не изменяется с UIGestureRecognizerStatePossible до тех пор, пока другой жест не перейдет в UIGestureRecognizerStateFailed или UIGestureRecognizerStateRecognized. Но поскольку жест miniTap не выходит из состояния по умолчанию UIGestureRecognizerStatePossible, поскольку касание не отображается, жест nonMiniTap не распознается. Таким образом, ваши касания в родительском представлении не работают.

Как таковая, зависимость не требуется. Вы можете снять эту строку, и она должна работать так, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...