2010-07-14 2 views
0

작동하지 드롭 응용 프로그램 (일부 이미지 뷰, 텍스트 필드 및 팝업 버튼을 포함, NSView의 하위 클래스)간단한 드래그와 나는 간단한 드래그를 시도하고 응용 프로그램을 삭제하고

  1. 나는 CameraIconView을 만드는 오전를 , 실행시.
  2. 이보기는 CameraIconEnclosingBox (NSBox의 하위 클래스)에 포함되어 있습니다.
  3. 요구 사항 : 사용자는 CameraIconEnclosingBox의 다른 위치에서 CameraIconView를 드래그 할 수 있어야합니다.

내가이 일을하고 내 요구 사항을 구현하려면

  1. 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

나는이 코드 줄 추가하여 해결할 수 있어요

답변

0

:

[object setFrame:NSMakeRect(x, y, width, height)]; 

그래서 CameraIconView 지금이 코드 앞에

[self addSubview:object]; 

을 떨어진 위치에 나타납니다. :)

...하지만 지금은 CameraIconView가 드래그 및 삭제 새로운 problem-

마다 직면하고, 그것은 위치 새 위치로 끌어 CameraIconView 아니라, 만드는 새 위치에서 CameraIconEnclosingBox 내에 새 인스턴스를 표시하는 입니다. 그리고 첫 드러그

사람이 나에게 몇 가지 방법을 제안 할 수 있습니다 .... 두 번째 끌기 위해 ... 두 개의 아이콘이 같은 CameraIconView 에 대한 표시 을 시작 드롭 세 아이콘 등등 나타나는 시작하고 드롭 그것을 해결할 수 있습니까?

감사합니다,

Miraaj