В Интерфейсном Builder.app (и некоторые другие приложения какао), перетаскивание изображения имеет очень хороший/сексуальный эффект превращения изображения перетаскивания при перетаскивании перемещаемого объекта из его окна.
Например, в Интерфейсном Buildler.app:
Примечание: поскольку Вы перетаскиваете объект из окна Library Palette, он превращается из изображения исходного элемента списка к изображению значка перетащенного объекта.
Я полностью реализовал перетаскивание в своем Приложении с помощью нормального Какао средства NSDragSource/NSDragDestination.
Однако я не могу найти рычаг для того, чтобы сделать этот морф изображения при перетаскивании. Я возвращаю первоначальное изображение перетаскивания путем переопределения
-[NSView dragImage:at:offset:event:pasteboard:source:slideBack:]
Но это только называют в начале перетаскивания.
Как Вы предупреждаете, что требуется заменить текущее изображение перетаскивания (идеально использующий сексуальный эффект морфа).
Ребята, вы меня опередили :-)
Да, JLNDragEffectManager с открытым исходным кодом (с указанием авторства в ваших приложениях, пожалуйста) и доступен в моем блоге. Он должен отлично работать как есть без изменений до версии 10.5, но я не уверен, что дальше. На него ссылались другие (и его легко найти в гугле), поэтому, чтобы избежать самодовольных ссылок на блог, я оставлю все как есть.
Проблемы: Один из разработчиков прокомментировал (и предоставил код для исправления) отсутствие поддержки смещения при перетаскивании. Я просто не успел опубликовать обновление. Это единственная нерешенная проблема, о которой я знаю.
Улучшения: Я бы хотел добавить несколько "зон" (скажем, по одной на документ, чтобы при перетаскивании из документа в документ строки таблицы выглядели как строки таблицы, но в любом месте за пределами окна документа они превращались в значок файла, как в HFS Promise Drag). Когда-нибудь ...
Дизайн: В самом посте подробно описано обоснование дизайна и относительно простой эффект морфинга (перекрестное переключение и размер анимируются с помощью базовой NSAnimation и т.д.). Код (класс, а также демонстрационное приложение) подробно разобран и прокомментирован.
Не буду ссылаться на свой пост, но буду рад карме в виде upvotes за мои усилия. ;-)
UPDATE: Аналогичная (но лучше интегрированная) функциональность доступна в версии 10.7. Если вы используете версию 10.7 или выше, лучше использовать новый API. JLNDragEffectManager прекрасно работает в 10.7, поэтому его можно использовать для более ранних версий.
API не поддерживает это хорошо. Джошуа Ноцци приводит метод, который выглядит разумным в этой записи в блоге .
Эффект ИБ не такой уж фантастический. Это кроссфейд и масштаб. Удерживайте Shift, чтобы увидеть это более четко.