Objective c Cocoa:如何在拖动时变形拖动图像
在Interface Builder.app(和其他一些cocoa应用程序)中,图像拖动具有非常好/性感的效果,即在将可拖动的项目拖出窗口时变形拖动图像 例如,在界面Buildler.app中:Objective c Cocoa:如何在拖动时变形拖动图像,objective-c,cocoa,macos,drag-and-drop,Objective C,Cocoa,Macos,Drag And Drop,在Interface Builder.app(和其他一些cocoa应用程序)中,图像拖动具有非常好/性感的效果,即在将可拖动的项目拖出窗口时变形拖动图像 例如,在界面Buildler.app中: 显示库选项板(⇧⌘五十、 或工具菜单->库) 将项目从库选项板中拖出 注意:从库选项板窗口中拖动项时,它会从原始列表项的图像变形为拖动项的图标图像 我已经使用普通的Cocoa NSDragSource/NSDragDestination工具在我的应用程序中完全实现了拖放 但是,我找不到一个钩子来在拖动时
-[NSView dragImage:at:offset:event:pasteboard:source:slideBack:]
但这只在拖动开始时调用
您如何表示希望替换当前的拖动图像(理想情况下使用性感变形效果)。API不支持这一点。约书亚·诺齐(Joshua Nozzi)给出了一种在实践中看起来合理的方法 IB的效果并不是那么奇特。这是一个交叉渐变和缩放。按住shift键以更清楚地看到它 正是这样做的。:) 你们打败了我。:-) 是的,JLNDragEffectManager是开源的(请在应用程序中提供属性),可以在我的博客上找到。它应该可以正常工作,没有修改回到10.5,但我不确定是否会再回到10.5。其他人链接到它(而且它很容易被谷歌搜索到),所以为了避免自我陶醉的博客链接,我就到此为止 问题:一位开发人员评论(并提交了代码来修复)缺少拖动偏移支持。我只是没有时间发布更新。这是我所知道的唯一悬而未决的问题 改进:我想添加多个“区域”(比如,每个文档一个区域,因此从一个文档拖动到另一个文档会使表行看起来像表行,但在文档窗口之外的任何地方都会将它们变成一个文件图标,就像HFS承诺拖动一样)。总有一天 设计:文章本身详细说明了设计背后的原因和相对简单的变形效果(交叉淡入加上大小使用基本动画等)。代码(类以及演示应用程序)被完全屏蔽并注释 不会链接到我自己的帖子,但会喜欢我的努力带来的业力。;-)
更新:从10.7开始提供类似(但集成度更好)的功能。如果您的目标是10.7或更高版本,最好使用新的API。JLNDrageEffectManager在10.7上运行良好,因此可以用于早期的目标版本。从10.7+开始,当前的方法是使用
enumerateDraggingItemsWithOptions:
forView:
classes:
searchOptions:
usingBlock:
NSDraggingInfo
上的API。文档确实很差,但ADC示例(如多光子游戏或TableView游乐场)可以提供如何使用新机制的好主意。非常感谢Joshua。这工作得很好。还有,很棒的博客帖子!:)如果你最终使用了这个类,请告诉我,我会将你的应用程序添加到源页面的列表中。