Question

So I want to drag an object from one source to multiple potential destinations. When the object is over each destination, I want it to 'morph' into a different image. Is there a straightforward way to do this from the NSDragSource perspective?

Was it helpful?

Solution

There's no way to do this using just the drag source APIs.

If you look at Interface Builder it does something similar to what you want. When you drag a button out of the library the button animates in the middle of the drag.

According to most people the way Apple is doing this is by making the drag image a small transparent image. Then they create a Window and have it follow the mouse. You can then use the window to do any type of animation you want.

OTHER TIPS

You can do so by using enumerateDraggingItemsWithOptions: method of NSDraggingInfo in your dragging destination's handler methods (i.e. - your implementation of NSDraggingDestination protocol).

For example:

- (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 has posted a great way to do this: http://joshua.nozzi.name/2009/10/jlndrageffectmanager/

Check out NSDraggingInfo's enumerateDraggingItemsWithOptions method.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top