Sono abbastanza nuovo alla programmazione e all'obiettivo C. Mi chiedevo come creare un'applicazione con uno schermo vuoto e un timer che dura per un minuto. Si intende toccare il più velocemente possibile e il più a lungo possibile. Mi chiedevo come implementare lo UITapGestureRecognizer
nel mio codice.Come implementare UITapGestureRecognizer nella mia applicazione
risposta
Questa è una guida passo passo su come implementare riconoscitori gesto nella classe:
conforma la tua classe per
UIGestureRecognizerDelegate
protocollo.Istanziare il riconoscimento dei gesti. Ad esempio, per creare un'istanza di un
UITapGestureRecognizer
, faremo:UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
Qui, l'azione è il selettore che gestirà il gesto. Qui, il nostro handleTapFrom selettore avrà un aspetto simile:
- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer { //Code to handle the gesture }
L'argomento al selettore è il sistema di riconoscimento gesto. Possiamo usare questo gesto riconoscitore per accedere alle relative proprietà, per esempio, siamo in grado di trovare lo stato del sistema di riconoscimento gesto, come,
UIGestureRecognizerStateBegan
,UIGestureRecognizerStateEnded
, eccImpostare le proprietà desiderate sul sistema di riconoscimento gesto istanziato. Ad esempio, per un
UITapGestureRecognizer
, possiamo impostare le proprietànumberOfTapsRequired
enumberOfTouchesRequired
.Aggiungere il riconoscimento del gesto alla vista per cui si desidera rilevare i gesti. Nel nostro codice di esempio (sarò condividere che il codice per il vostro riferimento), aggiungeremo di riconoscimento gesto a un IMAGEVIEW con la seguente riga di codice:
[self.imageView addGestureRecognizer:tapGestureRecognizer];
Dopo aver aggiunto il sistema di riconoscimento gesto alla vista, impostare il delegato per il riconoscimento dei gesti, ovvero la classe che gestirà tutte le informazioni sul riconoscimento dei gesti. Nel nostro codice di esempio, sarebbe come:
tapGestureRecognizer.delegate = self;
Nota: Assegnare il delegato dopo aver aggiunto il sistema di riconoscimento gesto alla vista. In caso contrario, il metodo di azione non verrà chiamato.
Ci scusiamo per il formato inadeguato !!! –
Grazie mille per il vostro aiuto ragazzi! –
Niente di cui dispiacersi. C'è una curva di apprendimento quando si tratta di formattazione del mark down. – nhahtdh
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
Esempio in 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.")
}
}
}
Esatto, userInteractionEnabled è essenziale. Grazie! –
Non capisco perché è necessario controllare "recognizer.state == UIGestureRecognizerState.Ended". Ho provato questo e funziona anche senza. La mia ipotesi è che ne hai bisogno per il riconoscimento di gesture multi-tap ma per un solo tocco, ne abbiamo ancora bisogno? – plam4u
Se si sta lavorando Swift (iOS9) e SpriteKit, provare quanto segue.
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")
}
}
aiutare se stessi: https://github.com/nhahtdh/PS3/blob/master/Game/GameBlock.m – nhahtdh