2010-05-25 30 views
5

Ví dụ: Tôi có một CGPoint trong cửa sổ tọa độ:Làm cách nào để chuyển đổi các tọa độ cửa sổ tương ứng với một chế độ xem cụ thể?

CGPoint windowPoint = CGPointMake(220.0f, 400.0f); 

aView trong đó có một SuperView trong một SuperView trong một SuperView. Một nơi nào đó sâu trong hệ thống phân cấp khung nhìn, thậm chí có thể chuyển đổi một vài lần.

Khi bạn nhận được một UITouch, bạn có thể yêu cầu nó cho -locationInView: và nó sẽ trả về tọa độ tương ứng với chế độ xem đó.

Tôi cần khá nhiều điều tương tự. Có cách nào dễ dàng để thực hiện điều đó không?

Trả lời

11

Tôi tìm thấy một giải pháp thực sự dễ dàng:

[self.aView convertPoint:windowPoint fromView:self.window]; 
+0

Có một số thói quen chuyển đổi như vậy một cung cấp bởi UIView. Tất cả chúng đều được mô tả trong hướng dẫn tham khảo lớp UIView. http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/instm/UIView/convertPoint:fromView: – progrmr

+0

Bí quyết tiện dụng nếu bạn cần làm điều này cho một khung rect, ví dụ cho hoạt hình, là [sourceView convertRect: targetView.bounds fromView: targetView]; không sử dụng targetView.frame hoặc bạn sẽ tăng gấp đôi thêm nguồn gốc của nó. – Hafthor

+0

Bạn có thể sử dụng nil thay vì self.window, trong trường hợp này, phương thức chuyển đổi trong cơ sở thành các tọa độ cửa sổ – mt81

0

Có lẽ bạn có thể lặp qua cây giám sát, xem chi tiết theo thẻ và cộng hoặc trừ giá trị frame.origin của bản xem dưới để được dịch sang số được xem.

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