Подтвердить что ты не робот

Фильтрация одиночных и двойных кранов

Когда пользователь отключает мое представление, мне нужен один конкретный метод для запуска. Когда пользователь удваивает краны, мне нужен другой метод.

Проблема заключается в том, что двойное нажатие вызывает одно нажатие, и оно вводит ошибки в мою логику. Я не могу использовать UIGestureRecognizer, потому что мне нужно отслеживать точки.

Я пробую несколько логических, но никаких шансов. Я также пробовал метод отмены /perfomSelector -delay, но он не работает (это странно, потому что другие люди на других форумах говорили, что это работает, возможно, обнаружение сенсорных симуляторов отличается?)

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

Спасибо заранее!

4b9b3361

Ответ 1

Проверьте этот, кажется правильным, что вы ищете:

Ниже кода для использования UITapGestureRecognizer для обработки одного крана и двойного крана. Код разработан таким образом, что он не будет запускать событие с одним нажатием, если мы получили событие двойного нажатия. Трюк - это использование requireGestureRecognizerToFail, чтобы спросить, что жест единственного нажатия оживает, пока событие с двойным нажатием не завершилось. Поэтому, когда пользователь нажимает на экран, единственный распознаватель жестов при нажатии не запускает событие до распознавания жестов двойного касания. Если распознаватель признака двойного касания распознает событие, он запускает событие двойной вкладки и пропускает событие однократного нажатия, в противном случае он запускает событие с одним нажатием.

    UITapGestureRecognizer *doubleTapGestureRecognizer = [[UITapGestureRecognizer alloc]
                            initWithTarget:self action:@selector(handleDoubleTap:)];
    doubleTapGestureRecognizer.numberOfTapsRequired = 2;

    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:doubleTapGestureRecognizer];

    //
    UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    singleTapGestureRecognizer.numberOfTapsRequired = 1;

    [singleTapGestureRecognizer requireGestureRecognizerToFail: doubleTapGestureRecognizer];
    //tapGestureRecognizer.delegate = self;
    [self addGestureRecognizer:singleTapGestureRecognizer];

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

Ответ 2

Быстрое решение:

    doubleTapSmall1.numberOfTapsRequired = 2
    doubleTapSmall1.addTarget(self, action: "doubleTapPic1")
    smallProfilePic1.addGestureRecognizer(doubleTapSmall1)

    singleTapSmall1.numberOfTapsRequired = 1
    singleTapSmall1.addTarget(self, action: "singleTapPic1")
    singleTapSmall1.requireGestureRecognizerToFail(doubleTapSmall1)
    smallProfilePic1.addGestureRecognizer(singleTapSmall1)

Ответ 3

Решение Swift 3:

doubleTap = UITapGestureRecognizer(target: self, action:#selector(self.doubleTapAction(_:)))
doubleTap.numberOfTapsRequired = 2


singleTap = UITapGestureRecognizer(target: self, action:#selector(self.singleTapAction(_:)))
singleTap.numberOfTapsRequired = 1

singleTap.require(toFail: doubleTap)

self.view.addGestureRecognizer(doubletap)
self.view.addGestureRecognizer(singleTap)

В строке кода singleTap.require(toFail: doubleTap) мы вынуждаем одиночный кран ждать и убедитесь, что метка даже не является двойным нажатием. Это означает, что мы просим обеспечить, чтобы событие двойного крана не удалось, поэтому оно завершается одним нажатием.

Ответ 4

Просто реализуйте методы делегатов UIGestureRecognizer, правильно установив делегат.

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{
            return  YES;
        }

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{
        return YES;
    }

Также добавьте эту строку кода

[singleTap requireGestureRecognizerToFail:doubleTap];