UILongPressGestureRecognizer дважды отправляет действие

Распознаватель жестов при длительном нажатии вызывает выполнение события действия дважды?

Я пытался понять Warning: Attempt to present VC2 on VC1 whose view is not in the window hierarchy!

Используя некоторые тесты println(), я обнаружил, что мой VC2 представлен дважды.

Мой метод презентации VC2:

P1long: UILongPressGestureRecognizer, расположенный в MainView VC1.

длинные соединения VC1.P1

При длительном нажатии на P1 в VC1

@IBAction func PresentPlayerInfo(sender: UIGestureRecognizer){
    var loc = sender.locationInView(self.view)
    var segueSwitch = 0

    if (CGRectContainsPoint(self.P1.frame, lock)) 
        { tappedView = self.P1; segueSwitch = 1 }
    else if (CGRectContainsPoint(self.ReDeal.frame, lock)) 
        { tappedView = self.ReDeal; segueSwitch = 2 }

    if segueSwitch == 1
        { performSegueWithIdentifier("PlayersTable", sender: self)
        println("PlayersTable") }

    else if segueSwitch == 2 
        { self.viewDidLoad() }
}

Вывод консоли:

PlayersTable PlayersTable Warning: Attempt to present <iPro_Poker_HH_swift.VC2: 0x14555470> on <iPro_Poker_HH_swift.VC1: 0x153a2600> whose view is not in the window hierarchy!

Почему мой LongPress действует дважды.


person Chameleon    schedule 27.04.2015    source источник
comment
По сути, дубликат этого и других.   -  person    schedule 28.04.2015


Ответы (1)


Вы должны обрабатывать состояние распознавателя жестов длительного нажатия. Действие UILongPressGestureRecognizer вызывается при изменении его состояния. Таким образом, вы получаете его в первый раз, когда состояние == UIGestureRecognizerStateBegan, и во второй раз, когда его UIGestureRecognizerStateEnded.

Вам нужно что-то вроде:

if (recognizer.state == UIGestureRecognizerStateEnded)
{
    //your action
}
person Krivoblotsky    schedule 27.04.2015
comment
Все ли GestureRecognizers такие же? - person Chameleon; 28.04.2015