2012-01-12 13 views
9

che sto cercando di fare una dichiarazione if-else per le mie CGPoints come sarei in grado di farlo, ho provato questo codice ...Obiettivo C: Confrontando CGPoints

if (point1 != point2) 
{ 
     //statement 
} 

sto avendo questo errore di

Invalid operand for binary expression...

Grazie!

+1

point1 e point2 è un operando di tipo definito dall'utente (struttura) e! = È un operatore. Qui il compilatore si confonde con il tipo di operando in quanto il compilatore può solo accettare il tipo di puntatore e il float char int come un operando. – iOSPawan

risposta

41

Provare a utilizzare la funzione CGPointEqualToPoint.

if (!CGPointEqualToPoint(p1,p2)) 
{ 
    //statement 
} 
+0

è applicabile anche per la caduta di oggetti in una particolare area? perché lo userò anche per quell'esempio :) :) – Ramiro

+0

@Ramiro - leggi il link di riferimento CGGeometry che ho incluso nella mia risposta. Dovrebbe molti di questi tipi di domande. – bryanmac

7

Vi consiglio di utilizzare seguente funzione: (da Apple Docs)

CGPointEqualToPoint: Indica se due punti sono uguali.

bool CGPointEqualToPoint (CGPoint point1, CGPoint point2); 

Parametri

point1: Il primo punto da esaminare.

point2: Il secondo punto da esaminare.

Valore restituito true se i due punti specificati corrispondono allo ; altrimenti, falso.

Per ulteriori informazioni leggere qui: CGGeometry Reference

8

si può fare:

if (!CGPointEqualToPoint(point1, point2)) { 
.... 
} 

carri (e quindi CGFloats) sono un po 'complicato perché a volte si desidera loro di essere considerati uguali, ma sono un margine molto piccolo fuori.se si vuole un confronto "fuzzy", si potrebbe fare qualcosa di simile:

if (fabsf(point1.x - point2.x) > 0.0001f || fabsf(point1.y - point2.y) > 0.0001f) { 
... 
} 

questa verifica per vedere se i x & componenti y del punto 1 e point2 sono diverse di una quantità maggiore di 0,0001 (un numero del tutto arbitraria, può essere quello che vuoi a seconda della tua precisione desiderata).