작동하지 드롭 응용 프로그램 (일부 이미지 뷰, 텍스트 필드 및 팝업 버튼을 포함, NSView의 하위 클래스)간단한 드래그와 나는 간단한 드래그를 시도하고 응용 프로그램을 삭제하고
- 나는 CameraIconView을 만드는 오전를 , 실행시.
- 이보기는 CameraIconEnclosingBox (NSBox의 하위 클래스)에 포함되어 있습니다.
- 요구 사항 : 사용자는 CameraIconEnclosingBox의 다른 위치에서 CameraIconView를 드래그 할 수 있어야합니다.
내가이 일을하고 내 요구 사항을 구현하려면
- CameraIconView에서 구현 된 다음과 같은 방법은
클래스 - - (무효) mouseDown : (NSEvent *) 전자 {
NSPoint location;
NSSize size;
NSPasteboard *pb = [NSPasteboard pasteboardWithName:@"CameraIconContainer"];
location.x = ([self bounds].size.width - size.width)/2;
location.y = ([self bounds].size.height - size.height)/2;
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:self];
[pb declareTypes:[NSArray arrayWithObject:IconDragDataType] owner:self];
[pb setData:data forType:IconDragDataType];
[self dragImage:[NSImage imageNamed:@"camera_icon.png"] at:location offset:NSZeroSize event:e pasteboard:pb source:self slideBack:NO];
}
을
2. CameraIconEnclosingBox 클래스에서 다음 메소드를 구현했습니다.
- (void)awakeFromNib{
[self registerForDraggedTypes:[NSArray arrayWithObject:IconDragDataType]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender{
return NSDragOperationEvery;
}
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender{
return YES;
}
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender{
NSPoint dropLocation = [sender draggingLocation];
float x = dropLocation.x;
float y = dropLocation.y;
NSLog(@"dragOperationConcluded! draggingLocation: (%f, %f)",x,y);
NSPasteboard *pb = [sender draggingPasteboard];
NSLog(@"Pasteboard name- %@",[pb name]);
NSData *draggedData = [pb dataForType:IconDragDataType];
CameraIconView *object = [NSKeyedUnarchiver unarchiveObjectWithData:draggedData];
NSLog(@"object - %@/cameraNo : %@/ operatorName : %@",object,[[object cameraNo] stringValue],[[object operatorName] stringValue]);
// the cameraNo and operatorName are properties defined within CameraIconView class
// the above log is returning (null) for both properties
float width = [object frame].size.width;
float height = [object frame].size.height;
NSLog(@"width - %f/height - %f",width,height);
[object setFrame:NSMakeRect(x, y, width, height)];
}
이러한 메서드를 구현 한 후에 CameraIconEnclosingBox의 모든 드래그 대리자 메서드가 호출되었지만 끌어 오기를 수행 할 수 있지만 놓기 작업이 작동하지 않습니다.
누구나 내 요구 사항을 구현하기 위해 잘못되었거나 다른 좋은 방법을 제안 할 수 있습니까?
감사합니다,
Miraaj
나는이 코드 줄 추가하여 해결할 수 있어요