macos - 如何在拖动过程中更改拖放图像?

标签 macos cocoa drag-and-drop nsdraggingitem

所以我想将一个对象从一个源拖动到多个潜在目的地。当物体位于每个目的地上方时,我希望它“变形”成不同的图像。从 NSDragSource 的角度来看,有没有一种简单的方法可以做到这一点?

最佳答案

您可以通过在拖动目标的处理程序方法中使用 NSDraggingInfoenumerateDraggingItemsWithOptions: 方法来实现此目的(即 - 您的 NSDraggingDestination 协议(protocol)的实现) .

例如:

- (NSDragOperation)draggingUpdated:(id < NSDraggingInfo >)sender
{
    NSImage* newDragImage = <take it from wherever>;
    [sender enumerateDraggingItemsWithOptions:0
                                      forView:sender.draggingSource
                                      classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
                                searchOptions:nil
                                   usingBlock:^(NSDraggingItem *draggingItem, NSInteger idx, BOOL *stop) {
                                       NSRect theFrame = draggingItem.draggingFrame;
                                       theFrame.size = newDragImage.size;
                                       [draggingItem setDraggingFrame:theFrame contents:newDragImage];
                                       *stop = NO;
                                   }];
}

关于macos - 如何在拖动过程中更改拖放图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1546943/

相关文章:

bash - Docker for Mac 容器中缺少回车

objective-c - 如何在 xcode cocoa 项目中创建一个打开文件对话框?

objective-c - NSPopUpButton 启用与禁用

javascript - 无法捕获fabricjs中的拖动事件

Delphi - 使用 ListView 拖放

objective-c - 如何取消选择 cocoa 中的单选按钮

macos - 为什么 tempdir() 在 osx 的目录树末尾添加了额外的斜杠?

objective-c - 非 Cocoa 命令行应用程序是否与 Mac App Store 兼容?

cocoa - 无法从...删除关键路径 "..."的观察者...,因为它未注册为观察者

delphi - 通过拖动移动/重新排序选项卡/页面控件