Nel mio programma, ho un UITapGestureRecognizer
che ho inizializzato con initWithTarget: action:
. Ho passato in un selettore per chiamare un metodo con il nome di PlanetTapped: (UIImageView *)aPlanet
. Questo chiama bene il metodo, tuttavia mi piacerebbe sapere come passare argomenti in action:
come si farebbe con performSelector: withObject
. È possibile? Avrebbe senso consentire di inviare argomenti al selettore di UIGestureRecognizer
. Qualsiasi aiuto è apprezzato.Invio di argomenti al selettore di inizializzazione del riconoscimento gestuale?
risposta
La firma corretta per il metodo da chiamare sarebbe:
-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer
allora si potrebbe accedere alla visualizzazione che ha ricevuto il gesto chiamando:
-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer {
UIImageView* aPlanet = gestureRecognizer.view;
...
}
In effetti, questo è ciò che UIGestureRecognizer reference stati:
Un riconoscitore di gesti ha una o più coppie di azioni di destinazione associate. Se esistono più coppie di azioni di destinazione, sono discrete e non cumulative. Il riconoscimento di un gesto comporta l'invio di un messaggio di azione a un target per ciascuna di tali coppie. I metodi di azione richiamati devono essere conformi a una delle seguenti firme:
- (vuoto) handleGesture;
- (vuoto) handleGesture: (UIGestureRecognizer *) gestureRecognizer;
- (void)viewDidLoad
{
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnPhotos:)];
[yourView addGestureRecognizer:longPressRecognizer];
}
- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender{
// use "sender.view" to get the "yourView" you have long pressed
}
auguriamo che questi vi aiutano.
In Swift 3.0, la firma funzione è la seguente (sostituire un'altra classe gesto riconoscitore a seconda dei casi in questi esempi):
func myButtonLongTouch(_ sender: UILongPressGestureRecognizer)
si fa riferimento a questa funzione quando l'impostazione dei riconoscitori gesto come segue:
longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:)))
Poi, per accedere alla vista (nel mio caso, un pulsante) che è stato premuto, utilizzare il codice:
if let button = sender.view as? UIButton {
// Your code here
}
Infine, non dimenticare che questa funzione viene chiamata più volte (in genere quando inizia il gesto e quando finisce), quindi ti consigliamo di verificare lo stato, che si può fare come segue:
if (sender.state == UIGestureRecognizerState.ended) {
// Your code here
}
Ah, certo. Avrei dovuto pensarci. Grazie per l'aiuto! – Fitzy