2010-10-25 20 views
8

Tôi đang thực hiện kéo và thả trong một ứng dụng cacao và tôi đang sử dụng các phương pháp sau đây từ Nghị định thư NSDraggingSource:Chuyển đổi NSPoint trong màn hình phối đến cửa sổ phối

- (void)draggedImage:(NSImage *)draggedImage movedTo:(NSPoint)screenPoint{ 

Các NSPoint được đưa ra trong tọa độ màn hình và tôi cần nó trong cửa sổ hoặc xem tọa độ. Nếu phương pháp được gọi với NSEvent, tôi có thể thực hiện các thao tác sau:

-(void)mouseDown:(NSEvent *)pTheEvent { 

NSPoint tvarMouseInWindow = [pTheEvent locationInWindow]; 
NSPoint tvarMouseInView = [self convertPoint:tvarMouseInWindow fromView:nil]; } 

Nhưng tôi không thể tìm ra cách thực hiện nó chỉ với NSPoint. Cảm ơn trước!

Trả lời

11

Có xem xét các tài liệu NSWindow, có một

- (NSPoint)convertScreenToBase:(NSPoint)aPoint 

mà sẽ cho phép bạn chuyển đổi các điểm đến tọa độ cửa sổ.

+0

Hoàn hảo ... Cảm ơn bạn rất nhiều! – Dillon

+6

'(NSPoint) convertScreenToBase: (NSPoint) aPoint' hiện không được hỗ trợ cho' (NSRect) convertRectFromScreen: (NSRect) aRect'. Rõ ràng người ta có thể chuyển đổi một điểm thành một hình chữ nhật, sử dụng phương pháp này, và sau đó chuyển đổi trở lại, nhưng đây thực sự là thành ngữ ưu tiên hiện nay? Phải có một cách tốt hơn. – Aeonaut

+3

@Omphalos: có vẻ như không phải là cách tốt hơn (hoặc tôi hoàn toàn bỏ lỡ nó), vì vậy tôi sẽ viết một phương pháp mới trên một loại NSWindow xây dựng một NSRect, chuyển đổi nó và trả về nguồn gốc của chuyển đổi rect. Nó loại khôi phục hành vi của '-convertScreenToBase:', và cho bạn một cơ hội để đặt tên nó phù hợp hơn với các phương thức tương tự khác; Tôi gọi tôi là '-convertPointFromScreen:'. – Tim

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