2016-02-29 1 views
0

J'ai deux boutons dans mon application. Je veux détecter le geste lorsque les deux boutons sont maintenus ensemble pendant au moins 3 secondes. Je sais peut détecter un seul geste de pression de bouton unique mais je veux appeler une seule fonction lorsque les deux boutons sont pressés & tenir ensemble pendant quelques secondes. Y a-t-il un moyen de le faire?Comment détecter deux boutons appuyez longuement sur le geste ensemble dans iOS?

+0

double possible de http://stackoverflow.com/questions/9039115/two-button-simultaneous-press-input – Rishab

+0

mais que diriez-vous geste de presse longue pendant 3 secondes – TechGuy

+0

caisse http: //stackoverflow.com/questions/6882808/detect-key-press-on-virtual-keyboard – Rishab

Répondre

0

Vous pouvez utiliser ce code.

@IBAction func longPress(gesture:UILongPressGestureRecognizer) { 
    let view = gesture.view! 
    print("state = \(gesture.state.rawValue)") 
    if gesture.state != UIGestureRecognizerState.Ended && gesture.state != UIGestureRecognizerState.Cancelled { 
     view.tag = 1 
    } else { 
     view.tag = 0 
    } 
    if button1.tag == 1 && button2.tag == 1 { 
     print("pressed both buttons for 3 seconds") 
    } else { 
     print("not pressed both buttons for 3 seconds") 
    } 
} 

L'idée est de garder une référence à la fois les touches, puis utiliser un dispositif de reconnaissance à long geste sur ces boutons se connecter à une seule action. A l'intérieur de l'action, vous obtenez le bouton sur lequel le geste est fait et ensuite changer son tag à 1. Si le geste se termine ou est annulé alors il est mis à 0. Lorsque les deux boutons sont pressés, les deux boutons auront une étiquette Dans ce cas, vous saurez que les boutons ont été enfoncés pendant plus de 3 secondes. Notez que vous devez définir la durée minimum dans le storyboard et garder les points de vente sur les boutons.

Vous pouvez utiliser une condition différente à la place des étiquettes pour vérifier l'état de pression longue si nécessaire, mais la même idée peut être utilisée.

Dans ObjC

-(IBAction)longPress:(UILongPressGestureRecognizer*) gesture { 
    UIButton* button = (UIButton*)gesture.view; 
    if (gesture.state != UIGestureRecognizerStateEnded && gesture.state != UIGestureRecognizerStateCancelled) 
    { 
     button.tag = 1; 
    } else { 
     button.tag = 0; 
    } 
    if (button1.tag == 1 && button2.tag == 1) { 
     NSLog(@"pressed both buttons for 3 seconds"); 
    } else { 
     NSLog(@"not pressed both buttons for 3 seconds"); 
    } 
} 
+0

pouvez-vous mettre à jour le code pour obj-c – TechGuy

+0

app s'écraser ici – TechGuy

+0

- [UIButton view]: sélecteur non reconnu envoyé à l'instance 0x7fee63018680 ' – TechGuy