2012-01-12 32 views
9

Tôi cố gắng để làm một tuyên bố if-else cho CGPoints tôi làm thế nào tôi sẽ có thể làm điều đó, tôi đã cố gắng mã này ...C Mục tiêu: So sánh CGPoints

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

Tôi đang gặp này lỗi

Invalid operand for binary expression...

Cảm ơn!

+1

point1 và point2 là toán hạng được người dùng xác định loại (cấu trúc) và! = Là toán tử. Ở đây trình biên dịch có được nhầm lẫn trong loại toán hạng như trình biên dịch chỉ có thể chấp nhận kiểu con trỏ và int float char vv như là một toán hạng. – iOSPawan

Trả lời

41

Cố gắng sử dụng hàm CGPointEqualToPoint để thay thế.

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

là điều này cũng có thể áp dụng cho việc thả các mục vào một khu vực cụ thể không? bởi vì tôi cũng sẽ sử dụng nó cho ví dụ đó. :) – Ramiro

+0

@Ramiro - đọc liên kết tham chiếu CGGeometry mà tôi đưa vào câu trả lời của mình. Nó nên có nhiều loại câu hỏi này. – bryanmac

7

tôi sẽ tư vấn để sử dụng chức năng sau: (từ Apple Documents)

CGPointEqualToPoint: Returns dù hai điểm đều bình đẳng.

bool CGPointEqualToPoint (CGPoint point1, CGPoint point2); 

thông số

point1: Điểm đầu tiên để kiểm tra.

point2: Điểm thứ hai cần kiểm tra.

Giá trị trả lại đúng nếu hai điểm được chỉ định là giống nhau; ngược lại, sai.

Để biết thêm thông tin đọc ở đây: CGGeometry Reference

8

bạn có thể làm:

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

nổi (và do đó CGFloats) là một chút khó khăn bởi vì đôi khi bạn muốn họ được coi là bình đẳng, nhưng họ là một lề nhỏ đi.nếu bạn muốn có một "mờ" so sánh, các bạn có thể làm một cái gì đó như:

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

này sẽ kiểm tra xem nếu x & y thành phần của point1 và Point2 là khác nhau bởi số tiền lớn hơn 0,0001 (một số hoàn toàn tùy ý, có thể là bất cứ điều gì bạn muốn tùy thuộc vào độ chính xác mong muốn của bạn).