Как изменить перетаскивание изображения в середине перетаскивания? - PullRequest
7 голосов
/ 10 октября 2009

Итак, я хочу перетащить объект из одного источника в несколько потенциальных мест назначения. Когда объект находится над каждым пунктом назначения, я хочу, чтобы он «превратился» в другое изображение. Есть ли прямой способ сделать это с точки зрения NSDragSource?

Ответы [ 4 ]

17 голосов
/ 13 июня 2013

Вы можете сделать это, используя enumerateDraggingItemsWithOptions: метод NSDraggingInfo в методах обработчика места назначения перетаскивания (т. Е. Ваша реализация протокола NSDraggingDestination).

Например:

- (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;
                                   }];
}
5 голосов
/ 28 ноября 2009

Джошуа Ноцци опубликовал отличный способ сделать это: http://joshua.nozzi.name/2009/10/jlndrageffectmanager/

4 голосов
/ 29 августа 2012

Проверьте метод enumerateDraggingItemsWithOptions NSDraggingInfo.

3 голосов
/ 10 октября 2009

Нет способа сделать это, используя только API-интерфейсы источника перетаскивания.

Если вы посмотрите на Interface Builder, он сделает что-то похожее на то, что вы хотите. Когда вы перетаскиваете кнопку из библиотеки, кнопка анимируется в середине перетаскивания.

По мнению большинства людей, Apple делает это, перетаскивая маленькое прозрачное изображение. Затем они создают окно и следуют за ним. Затем вы можете использовать окно для создания анимации любого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...