2010-10-25 120 views
8

我实现在Cocoa应用程序拖放和我使用从NSDraggingSource协议下面的方法:转换NSPoint在屏幕坐标窗口坐标

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

的NSPoint在屏幕坐标,并给出我需要它在窗口或视图坐标中。如果用NSEvent调用该方法,我可以执行以下操作:

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

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

但是我不知道如何使用NSPoint执行此操作。提前致谢!

回答

11

看一看的NSWindow文档,有一个

- (NSPoint)convertScreenToBase:(NSPoint)aPoint 

,这将让你转换点到窗口坐标。

+0

完美...非常感谢! – Dillon 2010-10-25 10:58:57

+6

'(NSPoint)convertScreenToBase:(NSPoint)aPoint'现在不赞成使用'(NSRect)convertRectFromScreen:(NSRect)aRect'。显然,可以将点转换为矩形,使用此方法,然后转换回来,但是这真的是现在的首选成语吗?有一个更好的方法。 – Aeonaut 2011-08-15 22:02:01

+3

@Omphalos:似乎没有更好的方法(或者我完全忽略它),所以我最终在NSWindow的一个类中编写了一个新方法,它构建了一个NSRect,将其转换并返回转换的矩形。它有助于恢复'-convertScreenToBase:'的行为,并使您有机会更加符合其他类似的方法;我打电话给我'-convertPointFromScreen:'。 – Tim 2012-10-15 17:31:40

相关问题