2009-06-11 14 views
16

Cercando di ottenere alcune funzionalità di trascinamento/rilascio di base per un'applicazione iPhone.Trascina/rilascia iPhone

mio codice corrente per cercare di fare questo è la seguente:

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event 
{ 
    UITouch *touch = [touches anyObject]; 

    CGPoint location = [touch locationInView:self]; 
    self.center = location; 
} 

Questo codice ha il risultato di un'UIView toccata tremolante, mentre segue il tocco intorno. Dopo aver giocato un po ', ho anche notato che l'UIView sembrava sfarfallare dalla posizione 0,0 sullo schermo alla posizione correntemente toccata.

Qualche idea su cosa sto facendo male?

+0

in che vista si trova? Che opinioni hai nella tua app? –

+0

L'applicazione utilizza una vista singola per eseguire il rendering, con le visualizzazioni secondarie per i componenti interattivi. Questo codice si trova in un'implementazione di classe che eredita da UIImageView. – Simon

risposta

21

La proprietà centrale deve essere specificata nel sistema di coordinate del superview, ma è stato richiesto l'evento di tocco per la posizione in termini della sottoview. Chiedeteli invece in base alle coordinate della superview, in questo modo:

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 
    UITouch *touch = [touches anyObject]; 
    CGPoint location = [touch locationInView:self.superview]; // <--- note self.superview 

    self.center = location; 
} 
+0

Sembra una soluzione troppo ovvia per averlo perso, stupido. Verificherò domani e ti ricontatterò con il risultato, grazie! – Simon

+0

Tutto funziona ora, grazie ancora. – Simon