J'ai une sous-classe NSBox appelée dragBox. Je veux être capable de le faire glisser sur une toile. Le code est le suivant:draggingEnregistré non appelé
-(void) awakeFromNib
{
[[self superview] registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
}
-(void) mouseDown:(NSEvent *)theEvent
{
[self dragImage:[[NSImage alloc] initWithContentsOfFile:@"/Users/bruce/Desktop/Untitled-1.png"] at:NSMakePoint(32, 32) offset:NSMakeSize(0,0) event:theEvent pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] source:self slideBack:YES];
}
-(NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)sender // validate
{
NSLog(@"Updated");
return [sender draggingSourceOperationMask];
}
-(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
NSLog(@"Drag Entered");
return [sender draggingSourceOperationMask];
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender {
NSLog(@"Move Box");
[self setFrameOrigin:[sender draggingLocation]];
return YES;
}
-(BOOL) prepareForDragOperation:(id<NSDraggingInfo>)sender
{NSLog(@"Prepared");
return YES;
}
Pourquoi dragEntered n'est-il pas appelé? J'ai essayé d'utiliser tous les types de pboard et autres. Rien ne semble fonctionner. J'ai également changé le registerForDraggedTypes pour simplement travailler hors de la vue [self]. La boîte est une sous-vue d'une toile.
Bruce
L'enregistrement à chaque fois que 'drawRect:' est appelé est une mauvaise idée. Définissez un point d'arrêt ici pour voir ce que je veux dire. Ça s'appelle une tonne. Vous devriez le faire dans 'initWithFrame:' à la place. –
D'accord avec "Sam Soffes", le code peut être modifié et enregistré dans "initWithFrame". DrawRect sera invoqué à chaque fois qu'il y aura un rafraîchissement sur la vue et sera enregistré à nouveau même s'il est –