У меня есть подкласс NSBox под названием dragBox. Я хочу, чтобы можно было перетащить его вокруг холста. Код выглядит следующим образом:draggingEntered не называется
-(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;
}
Почему не перетаскивается вызов? Я попытался использовать все типы pboard и т. Д. Ничто не работает. Я также изменил registerForDraggedTypes, чтобы просто отключиться от представления [self]. Коробка является подзоном холста.
Брюс
Регистрация при каждом вызове 'drawRect:' - это плохая идея. Установите контрольную точку здесь, чтобы понять, что я имею в виду. Его называют тонной. Вы должны сделать это в 'initWithFrame:' вместо этого. –
Согласен с «Sam Soffes», код может быть изменен и зарегистрирован в «initWithFrame». DrawRect будет вызываться каждый раз, когда когда-либо будет обновление на представлении, а также будет зарегистрировано снова, даже если оно –