2010-10-25 13 views
8

j'applique le glisser-déposer dans une application de cacao et je me sers de la méthode suivante du protocole NSDraggingSource:Convertir NSPoint en coordonnées d'écran à la fenêtre de coordonnées

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

Le NSPoint est donné en coordonnées d'écran et j'ai besoin dans les coordonnées de la fenêtre ou de la vue. Si la méthode a été appelée avec un NSEvent que je pouvais faire ce qui suit:

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

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

Mais je ne peux pas comprendre comment le faire avec juste un NSPoint. Merci d'avance!

Répondre

11

Jetez un oeil à la documentation NSWindow, il y a un

- (NSPoint)convertScreenToBase:(NSPoint)aPoint 

qui vous permettra de convertir le point de coordonnées de la fenêtre.

+0

Parfait ... Merci beaucoup! – Dillon

+6

'(NSPoint) convertScreenToBase: (NSPoint) aPoint' est maintenant déconseillé en faveur de' (NSRect) convertRectFromScreen: (NSRect) aRect'. Évidemment, on peut convertir un point en un rectangle, utiliser cette méthode, puis reconvertir, mais est-ce vraiment l'idiome préféré maintenant? Il doit y avoir un meilleur moyen. – Aeonaut

+3

@Omphalos: il ne semble pas y avoir de meilleur moyen (ou il me manque complètement), donc j'ai fini par écrire une nouvelle méthode sur une catégorie de NSWindow qui construit un NSRect, le convertit, et retourne l'origine de le rect converti. Il restaure en quelque sorte le comportement de '-convertScreenToBase:', et vous donne l'opportunité de le nommer plus en ligne avec d'autres méthodes similaires; J'ai appelé le mien '-convertPointFromScreen:'. – Tim