2009-03-15 13 views
6

Hiện tại tôi thấy rằng sự kiện chạm sẽ hiển thị cho tôi UIView nơi chạm xảy ra. Nhưng nếu tôi cần phải phát hiện một liên lạc của một số hình dạng không hình chữ nhật, giống như một vòng tròn. Làm thế nào tôi sẽ đi về làm một cái gì đó như thế?Làm cách nào để phát hiện một liên lạc trên một khu vực cụ thể

Về cơ bản, tôi chỉ muốn làm điều gì đó nếu người dùng chạm vào một nơi nào đó trong khu vực hình tròn không hiển thị.

Bất kỳ trợ giúp/hướng nào được đánh giá cao, TIA!

Trả lời

7

Bạn sẽ làm như vậy. Lưu ý rằng 'locationInView' sẽ trả về tọa độ của liên lạc đối với chế độ xem được chỉ định, do đó, một liên lạc ở góc trên cùng bên trái của chế độ xem sẽ trở lại (0,0) bất kể vị trí đó trên màn hình.

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

    // gets the coordinats of the touch with respect to the specified view. 
    CGPoint touchPoint = [touch locationInView:self]; 

    // test the coordinates however you wish, 
    ... 
} 

Để thử nghiệm với một hình cầu, bạn sẽ tính khoảng cách từ điểm tiếp xúc đến trung tâm của hình cầu, sau đó kiểm tra xem giá trị này có nhỏ hơn bán kính hình cầu hay không.

+0

Cảm ơn Andrew! Bất kỳ mẹo nào về cách tìm ra một số hình dạng không chuẩn? Tôi đoán nó sẽ là một cái gì đó giống như vẽ một hình dạng với CGContext, và sau đó bằng cách nào đó kiểm tra chống lại điều đó? hay cái gì ? – dizy

+0

Bạn sẽ sử dụng CGContext để vẽ nhưng đối với "IsInside" calc bạn sẽ phải sử dụng toán học. Nếu bạn có thể thể hiện các hình dạng như đa giác, nó khá thẳng về phía trước. Liên kết này có thể giúp: http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly/ –