Come si fa a cambiare l'immagine mid-trascinamento drag-and-caduto?
-
20-09-2019 - |
Domanda
Quindi voglio trascinare un oggetto da una fonte a più destinazioni possibili. Quando l'oggetto è sopra ogni destinazione, voglio che 'morph' in un'immagine diversa. C'è un modo semplice per fare questo dal punto di vista NSDragSource?
Soluzione
Non c'è modo per farlo utilizzando solo le API di trascinamento.
Se si guarda Interface Builder si fa qualcosa di simile a ciò che si desidera. Quando si trascina un pulsante dalla biblioteca pulsante anima nel mezzo del trascinamento.
Secondo la maggioranza delle persone il modo in cui Apple sta facendo questo è di rendere l'immagine di trascinamento di una piccola immagine trasparente. Poi creare una finestra e farlo seguire il mouse. È quindi possibile utilizzare la finestra per fare qualsiasi tipo di animazione che si desidera.
Altri suggerimenti
È possibile farlo utilizzando il metodo di enumerateDraggingItemsWithOptions:
NSDraggingInfo
a metodi del gestore del tuo destinazione trascinando (vale a dire - l'implementazione del protocollo NSDraggingDestination
).
Ad esempio:
- (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 ha pubblicato un ottimo modo per fare questo: http: //joshua.nozzi .name / 2009/10 / jlndrageffectmanager /
Scopri il metodo di enumerateDraggingItemsWithOptions NSDraggingInfo.