2013-09-26 1 views
11

Ho sperimentato con UIGestureRecognizers e il nuovo SKScene/SKNode's in SpriteKit. Ho avuto un problema, e mi sono avvicinato a ripararlo ma sono confuso su una cosa. Essenzialmente, ho un riconoscitore di gesture pan che permette all'utente di trascinare uno sprite sullo schermo.UIPanGestureRecognizer in SKScene

L'unico problema che ho è che basta un tocco per inizializzare effettivamente il gesto di panoramica, e quindi solo sul secondo tocco su di esso funziona correttamente. Sto pensando che questo è perché il mio gesto pan è inizializzato in touchesBegan. Tuttavia, non so dove altro metterlo da quando l'inizializzazione nel metodo initWithSize di SKScene ha impedito il corretto funzionamento del riconoscitore di gesti.

risposta

11

Questo è perché si sta aggiungendo il gesto in tocco iniziato, quindi il gesto non esiste finché lo schermo è stato toccato almeno una volta. Inoltre, vorrei verificare che stai effettivamente usando initWithSize: come inizializzatore, perché non dovresti avere problemi ad aggiungere il gesto lì.

Un'altra opzione è spostare il codice per aggiungere il gesto in -[SKScene didMovetoView:] che viene chiamato immediatamente dopo che la scena è stata presentata. Maggiori informazioni in the docs.

- (void)didMoveToView:(SKView *)view 
{ 
    [super didMoveToView:view]; 
    // add gesture here! 
} 
1

Questo è il mio primo post! Sperando di non inciampare sui miei stessi piedi ...

Ciao ragazzi, quindi stavo avendo un problema con un UISwipeGestureRecognizer non funzionante. Lo stavo inizializzando nel mio metodo initWithSize, quindi in base a questo post l'ho spostato nel mio metodo didMoveToView. Ora funziona (grazie 0x7fffffff). Tutto ciò che ho fatto è stato tagliare le due righe seguenti da un metodo e incollarle nell'altro.

_warpGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(warpToNextLevel:)]; 
[self.view addGestureRecognizer:_warpGesture]; 

Nel mio "indagine" mi sono imbattuto userInteractionEnabled e ha cercato di impostarlo su YES nel mio metodo initWithSize ...

self.view.userInteractionEnabled = YES; 
NSLog(@"User interaction enabled %s", self.view.userInteractionEnabled ? "Yes" : "No"); 

Questo sarebbe il login NO anche se io avevo appena impostato a SÌ. Ulteriori indagini hanno rilevato che se non provo a impostare manualmente userInteractionEnabled, allora è NO durante initWithSize (non riesco a cambiarlo se lo desidero) e automaticamente viene impostato su SÌ quando sono in didMoveToView.

Questo mi sembra rilevante ma mi piacerebbe che qualcuno sapesse spiegare cosa sta succedendo qui. Grazie!