dragBox라는 NSBox 하위 클래스가 있습니다. 캔버스 주위로 드래그 할 수 있기를 원합니다. 코드는 다음과 같습니다 :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;
}
왜 dragEntered가 호출되지 않습니까? 나는 모든 보드 유형 등을 사용하려고했습니다. 아무것도 작동하는 것 같습니다. 또한 registerForDraggedTypes를 변경하여 [self] 뷰를 처리했습니다. 상자는 캔버스의 하위보기입니다.
브루스
'drawRect :'가 호출 될 때마다 등록하는 것은 나쁜 생각입니다. 여기에 중단 점을 설정하면 무슨 뜻인지 알 수 있습니다. 그것은 톤이라고 부른다. 대신에'initWithFrame :'에서 이것을해야한다. –
"Sam Soffes"와 동의하면 코드를 변경하고 "initWithFrame"에 등록 할 수 있습니다. DrawRect는 뷰에 새로 고침이있을 때마다 호출되며, 뷰가 다시 시작될 때마다 다시 등록됩니다. –