2009-09-24 40 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在哪裏發揮作用。我只是使用c距離函數來計算距離並進行比較。 – Austin 2009-09-25 20:17:11

+0

該功能爲您提供正確的最小距離來啓動拖動。如果用戶沒有移動這個距離,他們只是按住鼠標按鈕。 – 2009-09-25 21:45:13

相關問題