【发布时间】:2010-12-05 12:56:57
【问题描述】:
所以我想将一个对象从一个来源拖到多个潜在目的地。当对象在每个目的地上方时,我希望它“变形”成不同的图像。从 NSDragSource 的角度来看,有没有一种直接的方法可以做到这一点?
【问题讨论】:
标签: macos cocoa drag-and-drop nsdraggingitem
所以我想将一个对象从一个来源拖到多个潜在目的地。当对象在每个目的地上方时,我希望它“变形”成不同的图像。从 NSDragSource 的角度来看,有没有一种直接的方法可以做到这一点?
【问题讨论】:
标签: macos cocoa drag-and-drop nsdraggingitem
您可以在拖动目标的处理程序方法中使用NSDraggingInfo 的enumerateDraggingItemsWithOptions: 方法(即-您的NSDraggingDestination 协议的实现)。
例如:
- (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;
}];
}
【讨论】:
Joshua Nozzi 发布了一个很好的方法:http://joshua.nozzi.name/2009/10/jlndrageffectmanager/
【讨论】:
查看 NSDraggingInfo 的 enumerateDraggingItemsWithOptions 方法。
【讨论】:
仅使用拖动源 API 无法做到这一点。
如果您查看 Interface Builder,它的功能与您想要的类似。当您将一个按钮拖出库时,该按钮会在拖拽的中间进行动画处理。
根据大多数人的说法,Apple 的做法是将拖动图像制作成一个小的透明图像。然后他们创建一个窗口并让它跟随鼠标。然后,您可以使用该窗口来执行您想要的任何类型的动画。
【讨论】: