2009-09-24 5 views
0

나는 끌어서 놓기를 통해 컬렉션보기 항목을 다시 정렬 할 수 있도록 서브 클래 싱 한 컬렉션 뷰를 가지고 있습니다. pasterboard을 설정 내 드래그 코드의 mouseDragged 현재 :사용자가 실수로 Cocoa에서 드래그를 시작하는 것을 방지하려면 어떻게해야합니까?

- (void)mouseDragged:(NSEvent *)aEvent { 

    if(!dragInProgress) { 
     dragInProgress = YES; 

     NSPasteboard *pboard = [NSPasteboard pasteboardWithName:NSDragPboard];   

      ... setup pboard, declare types, setData ... 
      ... create drag image .... 

     [self dragImage: image 
         at: position 
        offset: NSZeroSize 
        event: aEvent 
       pasteboard: pboard 
        source: self 
       slideBack: YES]; 
    } 
} 

나는 사용자가 특정 기간 동안 끌고 경우에만 드래그를 시작하고 싶은, 그래서 그들은 실수로 드래그를 시작하지 마십시오. Cocoa에서이 작업을 수행 할 수있는 설정이 있습니까? 아니면이 코드를 mouseMoved로 이동해야합니까? 그리고 드래그 시작 위치와 현재 마우스 위치 사이의 거리를 확인하십시오.

답변

2

mouseDown:에서 마우스가 어디로 갔는지 기억하십시오 (locationInWindow). mouseDragged:에서 마우스 끌기 이벤트의 위치에서 마우스 다운 이벤트의 위치를 ​​뺀 다음 kMouseParamsDragInitiation 선택자를 사용하여 HIMouseTrackingGetParameters에 의해 반환 된 크기와의 차이를 비교하십시오.

+0

mouseDown에 locationInWindow를 기록하고이를 mouseDragged에있는 locationInWindow와 비교하면 해결됩니다. HIMouseTrackingGetParameters와 kMouseParamsDragInitiation이 어디에서 작동하는지 알지 못했습니다. 방금 거리 함수를 사용하여 거리를 계산하고 비교했습니다. – Austin

+0

그 기능은 끌기를 시작하기위한 정확한 최소 거리를 제공합니다. 사용자가 해당 거리를 이동하지 않았다면 마우스 버튼을 누른 채로 있습니다. –

관련 문제