8
votes

Comment changez-vous une image de glisser-glisser-déposée?

Donc, je veux faire glisser un objet d'une source à plusieurs destinations potentielles. Lorsque l'objet est sur chaque destination, je veux que ce soit «morph» dans une image différente. Y a-t-il un moyen simple de le faire depuis le point de vue de NsdragSource?


0 commentaires

4 Réponses :


3
votes

Il n'y a aucun moyen de le faire en utilisant uniquement les API de la source de glisser.

Si vous regardez au constructeur d'interface, il fait quelque chose de similaire à ce que vous voulez. Lorsque vous faites glisser un bouton de la bibliothèque, le bouton anime au milieu de la traînée.

Selon la plupart des gens, la façon dont Apple fait cela, c'est en faisant l'image de glisser une petite image transparente. Ensuite, ils créent une fenêtre et suivent la souris. Vous pouvez ensuite utiliser la fenêtre pour effectuer n'importe quel type d'animation que vous souhaitez.


1 commentaires

Au moins 10,7+ la réponse acceptée n'est plus correcte - voir Иван георгиев Réponse pour la voie actuelle de changer de choses à mi-glisser-froid!



5
votes

Joshua Nozzi a posté un excellent moyen de faire ceci: http: //joshua.nozzi .name / 2009/10 / JlndrageFtManager /


2 commentaires

Ouais. Ceci est un gestionnaire de chute pour cet effet particulier. Le téléchargement contient une application de démonstration.


Si vous finissez par utiliser cette classe, faites-le-moi savoir et je vais ajouter votre application à la liste sur la page source.



4
votes

Consultez NSDRAGGGGGINGIFO


1 commentaires

Veuillez éditer votre réponse à Elaborer: comment utiliseriez-vous cette méthode pour résoudre ce problème?



19
votes

Vous pouvez le faire en utilisant énumérerRaggingSwithOptions: code> méthode de nsdragginginfo code> dans les méthodes de gestion de la destination de glisser (c.-à-d. - Votre implémentation de NsdraggingDestination code> protocole) .

Par exemple: P>

- (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;
                                   }];
}


0 commentaires