2010-10-16 5 views
8

Stiamo aggiungendo funzionalità di trascinamento della selezione a ciò che è destinato a diventare un campo sportivo con posizioni per i giocatori.iOS - Rilevamento della collisione drag-and-drop Come rilevare quando l'oggetto selezionato viene trascinato su un'altra sottoview?

Le posizioni vengono mappate utilizzando Interface Builder, ognuna delle quali è una UIImageView separata.

Vogliamo essere in grado di trascinare le immagini dei giocatori dalle posizioni del banco dal lato dello schermo alle posizioni sul campo.

Come è possibile individuare il momento migliore in cui il giocatore selezionato che viene spostato si scontra con una immagine di gioco esistente?

Stiamo cercando un modo per rilevare se c'è una vista o ImageView nella posizione corrente.

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView:touch.view]; 
    tile1.center = location; 

    if gamePositionExistsAtCurrentLocation(location) { //want something like this 
    [tile1 setBackgroundColor:[UIColor blueColor]]; 
    } else { 
    [tile1 setBackgroundColor:[UIColor yellowColor]]; 
    } 
} 

risposta

14

di controllo se la cornice dell'elemento che si sta spostando si interseca con la cornice dall'alto dei tuoi subviews

for (UIView *anotherView in self.subviews) { 
    if (movingView == anotherView) 
     continue; 
    if (CGRectIntersectsRect(movingView.frame, anotherView.frame)) { 
     // Do something 
    } 
} 

Se fossi in te, vorrei aggiungere tutti gli elementi rilevanti di gioco a un NSArray e per -scoprite questo. Quindi non rilevi collisioni con le visualizzazioni secondarie che non hanno nulla a che fare con il tuo gioco come etichette e così via.

+0

Così l'idea è che ogni volta che mi muovo corro attraverso una serie di oggetti e vedere se corrispondono mia posizione attuale (ma usando fotogramma, invece, come si parla)? – Evolve

+0

Esistono metodi forniti da Apple che posso usare per farmi sapere quali sottoview correntemente si intersecano con un punto specificato? – Evolve

4

Inoltre potrebbe prendere in considerazione view.center con CGRectContainsPoint()

+0

Il metodo ha il seguente formato: CGRectContainsRect (<# CGRect rect1 #>, <#CGRect rect2 #>) come rappresento view.center o location.centre come un rect? – Evolve

+0

Non CGRectContainsRect(), stavo dicendo usare CGRectContainsPoint(). Non utilizzare il primo, a meno che il tuo rettangolo di rilascio non sia significativamente più grande perché restituisce solo true se un rettangolo è interamente all'interno di un altro. – Nimrod

+0

Scusate il mio male .. miss-leggi il tuo post .. grazie. Ordinato. Il tuo suggerimento è stato molto utile. – Evolve

Problemi correlati