Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa:如何在拖动时变形拖动图像_Objective C_Cocoa_Macos_Drag And Drop - Fatal编程技术网

Objective c Cocoa:如何在拖动时变形拖动图像

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工具在我的应用程序中完全实现了拖放 但是,我找不到一个钩子来在拖动时

在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。这工作得很好。还有,很棒的博客帖子!:)如果你最终使用了这个类,请告诉我,我会将你的应用程序添加到源页面的列表中。