8

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

4

4 回答 4

19

enumerateDraggingItemsWithOptions:您可以通过在拖动目标的处理程序方法中使用方法来做到这一点NSDraggingInfo(即 - 您的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;
                                   }];
}
于 2013-06-13T08:53:55.253 回答
5

Joshua Nozzi 发布了一个很好的方法来做到这一点:http: //joshua.nozzi.name/2009/10/jlndrageffectmanager/

于 2009-11-27T22:05:40.160 回答
4

查看 NSDraggingInfo 的 enumerateDraggingItemsWithOptions 方法。

于 2012-08-28T23:11:31.617 回答
3

仅使用拖动源 API 无法做到这一点。

如果您查看 Interface Builder,它会执行与您想要的类似的操作。当您将一个按钮拖出库时,该按钮会在拖拽的中间进行动画处理。

根据大多数人的说法,Apple 这样做的方式是将拖动图像制作成一个小的透明图像。然后他们创建一个窗口并让它跟随鼠标。然后,您可以使用该窗口来执行您想要的任何类型的动画。

于 2009-10-10T05:58:32.430 回答