1

Мой длинный дескриптор жесткого нажатия вызывает его действие, которое должно быть выполнено дважды?UILongPressGestureRecognizer, отправляющий действие дважды

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

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

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

P1long: UILongPressGestureRecognizer расположен на MainView VC1 в

VC1.P1long connections

При длительном нажатии делается на 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 действует дважды.

+0

В основном дубликат [это] (http://stackoverflow.com/questions/27685851/uilongpressgesturerecognizer-getting-fired-twice?rq=1) и другие. – Anna

ответ

3

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

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

if (recognizer.state == UIGestureRecognizerStateEnded) 
{ 
    //your action 
} 
+0

И все же такие отличительные признаки GestureRecognizers? – Dustin

Смежные вопросы