Вземете UITapGestureRecognizer да разпознава докосванията, когато започнат?

Има ли някакъв начин да накарам UITapGestureRecognizer да стартира при докосване?

Не мога да използвам touchesBegan, защото използвам UITableView и супер изгледът по същество открадва събитието.

Просто искам да открия кога екранът е докоснат за първи път. Защо това е толкова трудно? Може би имам нужда от различно решение от използването на tapgesturerecognizer?


person maxhud    schedule 18.11.2013    source източник


Отговори (3)


Можете да използвате свойството state на UIGestureRecognizer, за да идентифицирате различни състояния на всеки жест -

@property(nonatomic,readonly) UIGestureRecognizerState state;  // the current state of the gesture recognizer

Така че, когато жестът започне, използвайте нещо подобно във вашия регистриран метод на обработка -

if (gestureRecognizer.state == UIGestureRecognizerStateBegan) {
    // Do your stuff
}
person Ashok    schedule 18.11.2013
comment
това не работи Връща невярно 100% от времето по някаква причина, въпреки че е относително състояниеEnded работи добре.. - person maxhud; 18.11.2013
comment
Това е така, защото UITapGestureRecognizer не е непрекъснат разпознавач. Разпознавателите за отделни жестове преминават от UIGestureRecognizerStatePossible към UIGestureRecognizerStateFailed или UIGestureRecognizerStateRecognized. Това е различно от непрекъснатите разпознаватели като пан или щипка, чийто преход през започва, променя, завършва. Можете да опитате да използвате възможното състояние, но бъдете уморени, тъй като това не означава непременно, че потребителят е докоснал, може да стартира различен жест. Бих препоръчал да използвате UIControl с UIControlStateHighlighted състояние целева двойка действие. - person atreat; 18.11.2013

Можете да добавите разпознавател на жестове с докосване към tableView в viewDidLoad по този начин:

UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureRecognized:)];
[self.tableView addGestureRecognizer:tapGestureRecognizer];

След това приложете този метод:

- (void)tapGestureRecognized:(UITapGestureRecognizer *)tapGestureRecognizer {
    NSLog(@"tap gesture recognized");
}

Току-що тествах това и работи добре. За всяко докосване получавам съобщението в регистрационния файл на моята конзола. Обърнете внимание, че това не позволява на табличния изглед да получава докосванията, други жестове просто ще се обработват от табличния изглед както обикновено.

person Leijonien    schedule 18.11.2013

Трябва да зададете delaysContentTouches = NO

person maxhud    schedule 18.11.2013