2013-01-02 34 views
5

thể trùng lặp:
Detect if CGPoint within polygonKiểm tra xem một tập hợp các tọa độ được chứa trong một hình dạng

Tôi có tọa độ của một tập hợp các chạm từ một UIEvent. Có cách nào để kiểm tra xem chúng có được chứa trong một hình dạng nào đó - một đa giác - mà tôi có thể định nghĩa không?

Tôi có kinh nghiệm về Java và tôi sẽ sử dụng lớp polygon và gọi phương thức contains(int x, int y). Có cách nào tương tự để thực hiện điều này trong Cocoa Touch không?

Trả lời

3

Nếu bạn xác định đa giác của mình là CGPath, bạn có thể sử dụng CGPathContainsPoint() ... Bạn có thể cho chúng tôi biết thêm về khái niệm ứng dụng của bạn không?

EDIT:

Ngoài ra còn có các cấp cao hơn UIBezierPath và/hoặc NSBezierPath .. cả những đối tượng có một phương pháp -containsPoint.

+0

Cảm ơn. Điều đó có vẻ chính xác những gì tôi đang tìm kiếm. Tôi không thể tìm thấy giải pháp này cho cuộc sống của tôi. – user1941895

+0

tốt, điều này đang sử dụng Core C API đồ họa, do đó, nó không phải ở cấp độ của Obj-C hoặc C++ ... Vì vậy, nó sẽ không xuất hiện trong tài liệu lớp Obj-C. – nielsbot

0

Có lẽ bạn đang làm một cái gì đó không bình thường, giống như bạn chỉ muốn chạm được phát hiện trong một hình tam giác hoặc một cái gì đó . Nếu vậy, bạn có thể bỏ qua điều này. Nhưng vì bạn mới sử dụng iOS, tôi khuyên bạn nên sử dụng lớp con UIControl với các cặp hành động mục tiêu hoặc UIGestureRecognizer.

Ví dụ mã sẽ là:

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

Sau đó trong target - có lẽ điều khiển tầm nhìn của bạn, bạn sẽ thực hiện phương pháp này:

- (void)buttonPressed:(id)sender 
{ 
} 

Với một trình nhận dạng cử chỉ, bạn sẽ thêm các cử chỉ công cụ nhận dạng cho một số UIView và, giống như với số UIControl, hãy thêm cặp mục tiêu-hành động:

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)]; 
[self.view addGestureRecognizer:tapRecognizer]; 

- (void)viewTapped:(UIGestureRecognizer *)recognizer 
{ 
} 

Đây là những cách tiếp cận điển hình cho tương tác người dùng cơ bản. Bạn sẽ có nhiều thời gian đơn giản hơn với việc sử dụng touchesBegan & công ty, mặc dù nếu đó là những gì bạn cần thì những người trả lời khác bạn đã đề cập đến.

Các vấn đề liên quan