34

Jestem całkiem nowy w programowaniu i Objective C. Zastanawiałem się, jak zrobić aplikację, która ma pusty ekran i timer, który działa przez jedną minutę. Masz uderzyć tak szybko, jak tylko możesz i tak długo, jak możesz. Zastanawiam się, jak wprowadzić UITapGestureRecognizer do mojego kodu.Jak zaimplementować UITapGestureRecognizer w mojej aplikacji

+0

pomóc sobie: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh

Odpowiedz

86

Jest to krok po kroku, w jaki sposób zaimplementować rozpoznawania, czyli recognizers gest w swojej klasie:

  1. Zgodne swoją klasę do protokołu UIGestureRecognizerDelegate.

  2. Wywołaj urządzenie do rozpoznawania gestów. Na przykład, aby utworzyć instancję UITapGestureRecognizer, zrobimy:

    UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)]; 
    

    Tutaj akcja jest selektor, który zajmie się gest. Tutaj nasz selector handleTapFrom będzie wyglądał mniej więcej tak:

    - (void) handleTapFrom: (UITapGestureRecognizer *)recognizer 
    { 
        //Code to handle the gesture 
    } 
    

    Argumentem do selektora jest narzędzie do rozpoznawania gestów. Możemy wykorzystać ten gest rozpoznawania, aby uzyskać dostęp do jego właściwości, na przykład, możemy znaleźć stan rozpoznawania gestów, jak, UIGestureRecognizerStateBegan, UIGestureRecognizerStateEnded itp

  3. Ustaw żądane właściwości na instancja rozpoznawania gestów. Na przykład dla UITapGestureRecognizer możemy ustawić właściwości numberOfTapsRequired i numberOfTouchesRequired.

  4. Dodaj urządzenie do rozpoznawania gestów do widoku, dla którego chcesz wykrywać gesty. W naszym przykładowym kodem (będę dzielić ten kod dla odniesienia), dodamy rozpoznawania, czyli recognizers gestów do ImageView z następującej linii kodu:

    [self.imageView addGestureRecognizer:tapGestureRecognizer]; 
    
  5. Po dodaniu rozpoznawania gestów do widoku, ustaw delegować na funkcję rozpoznawania gestów, tj. klasę, która zajmie się wszystkimi elementami rozpoznawania gestów. W naszym przykładowym kodzie, to byłoby tak:

    tapGestureRecognizer.delegate = self; 
    

    Uwaga: Przypisywanie delegata po dodaniu rozpoznawania gestów do widoku. W przeciwnym razie metoda akcji nie zostanie wywołana.

+0

Przepraszamy za nieprawidłowe formacie !!! –

+0

Wielkie dzięki za pomoc! –

+2

Nic nie jest przykro. Istnieje krzywa uczenia się, jeśli chodzi o formatowanie znaczników. – nhahtdh

11
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; 
[self.tableView addGestureRecognizer:gestureRecognizer]; 
self.tableView.userInteractionEnabled = YES; 
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches 
9

przykład w Swift:

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet var myUIImageView: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:") 
     singleTap.numberOfTapsRequired = 1 
     singleTap.numberOfTouchesRequired = 1 
     self.myUIImageView.addGestureRecognizer(singleTap) 
     self.myUIImageView.userInteractionEnabled = true 
    } 

    func myUIImageViewTapped(recognizer: UITapGestureRecognizer) { 
     if(recognizer.state == UIGestureRecognizerState.Ended){ 
      println("myUIImageView has been tapped by the user.") 
     } 
    } 

} 
+2

To prawda, userInteractionEnabled jest niezbędna. Dzięki! –

+0

Nie rozumiem, dlaczego jest wymagane sprawdzenie "rozpoznawana.state == UIGestureRecognizerState.Ended". Testowałem to i działa również bez niego. Zakładam, że potrzebujesz go do wielokrotnego rozpoznawania gestów, ale w przypadku jednego dotknięcia, czy nadal tego potrzebujemy? – plam4u

0

Jeśli pracujesz Swift (iOS9) i SpriteKit, spróbuj wykonać następujące czynności.

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 
     let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:)) 
     singleTap.numberOfTouchesRequired = 1 
     singleTap.addTarget(self, action:#selector(self.handleSingleTap)) 
     view.userInteractionEnabled = true 
     view.addGestureRecognizer(singleTap) 
    } 
    //event handler 
    func handleSingleTap(sender:UITapGestureRecognizer){ 
     print("tapped") 
    } 
} 
Powiązane problemy