【问题标题】:How to cancel a drag in a Mac application如何在 Mac 应用程序中取消拖动
【发布时间】:2026-01-04 23:25:02
【问题描述】:
我有一个具有画布 (NSView) 的应用程序,用户可以在其中拖动元素。当鼠标离开该视图的边缘时,它变成了一个拖动操作。
我想做的是当鼠标再次进入原始视图时,它会取消操作并再次自动开始在画布内移动。
我可以弄清楚我只需要弄清楚如何强制拖放取消的第二部分。我需要通过 draggingEntered: 以某种方式执行此操作,所以甚至在鼠标释放之前。
【问题讨论】:
标签:
objective-c
cocoa
drag-and-drop
【解决方案1】:
让您的画布视图也响应拖动。最初它的所有<NSDraggingDestionation> 协议方法只会返回“不,什么也不做”,但如果你从画布内开始拖动,你会跟踪它,一旦拖动离开并返回,你的 NSDraggingDestionation 方法将返回, “好的,我们接受,拖动结束,不要费心制作动画。”
然后您可以继续在本地跟踪。比如,假设你的画布调用了:
- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag;
然后该方法会将控制权返回给您的画布