Pergunta

Então, eu quero arrastar um objeto de uma fonte para vários destinos em potencial. Quando o objeto está acima de cada destino, eu quero que ele 'se transforme' em uma imagem diferente. Existe uma maneira direta de fazer isso na perspectiva do NSDRAGSource?

Foi útil?

Solução

Não há como fazer isso usando apenas as APIs da fonte de arrasto.

Se você olhar para o Builder da Interface, ele faz algo semelhante ao que você deseja. Quando você arrasta um botão para fora da biblioteca, o botão anima no meio do arrasto.

De acordo com a maioria das pessoas, a maneira como a Apple está fazendo isso é tornando a imagem de arrasto uma pequena imagem transparente. Em seguida, eles criam uma janela e seguem o mouse. Você pode usar a janela para fazer qualquer tipo de animação que desejar.

Outras dicas

Você pode fazer isso usando enumerateDraggingItemsWithOptions: método de NSDraggingInfo nos métodos de manipulador do seu destino de arrastar (ou seja - sua implementação de NSDraggingDestination protocolo).

Por exemplo:

- (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 postou uma ótima maneira de fazer isso: http://Joshua.nozzi.name/2009/10/jlndrageffettmanager/

Confira o método enumerado de NsdraggingInfo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top