如何帮助阻止我的用户在Cocoa中意外启动拖动?

时间:2009-09-24 16:05:52

标签: objective-c cocoa user-interface drag-and-drop

我有一个我已经子类化的集合视图,允许我通过拖放重新排序集合视图项。我设置pasterboard的拖拽代码目前是mouseDragged:

- (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:并检查拖动开始位置与鼠标当前位置之间的距离?

1 个答案:

答案 0 :(得分:2)

mouseDown:中,记住鼠标停在哪里(locationInWindow)。在mouseDragged:中,从鼠标拖动事件的位置减去鼠标按下事件的位置,并将差异与HIMouseTrackingGetParameterskMouseParamsDragInitiation选择器返回的大小进行比较。< / p>