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?
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.
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/
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.
Check out NSDraggingInfo's enumerateDraggingItemsWithOptions method.
© 2022 - 2024 — McMap. All rights reserved.