代码之家  ›  专栏  ›  技术社区  ›  Todd Ditchendorf

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

  •  6
  • Todd Ditchendorf  · 技术社区  · 16 年前

    在interface builder.app(以及其他一些Cocoa应用程序)中,当您将一个可拖动的项目从其窗口中拖动时,拖动图像会产生一种非常好的/性感的变形效果。

    例如,在interface buildler.app中:

    1. 显示库调色板(§l,或“工具”菜单->库)
    2. 从库调色板中拖动项目

    注意:当您将该项从“库调色板”窗口中拖动时,它将从原始列表项的图像变形为拖动项的图标的图像。

    我已经使用普通的cocoa nsdragsource/nsdragdestination工具在应用程序中完全实现了拖放。

    然而,我找不到一个钩子做这个图像变形,而拖动。我将通过覆盖返回初始拖动图像

    -[NSView dragImage:at:offset:event:pasteboard:source:slideBack:]
    

    但这只在拖动开始时调用。

    如何发出信号,表示您希望替换当前的拖动图像(理想情况下使用性感变形效果)。

    4 回复  |  直到 12 年前
        1
  •  12
  •   Joshua Nozzi    14 年前

    你们打败了我。-)

    是的,jlndrageffectmanager是开源的(请在您的应用程序中添加属性),可以在我的博客上找到。它应该可以正常工作,10.5之前没有任何修改,但我不确定还会继续。其他人链接到它(它很容易被谷歌搜索到),所以为了避免自吹自擂的博客链接,我将把它留在那里。

    问题: 一位开发人员对缺少拖动偏移量支持发表了评论(并提交了要修复的代码)。我还没来得及发布更新。这是我所知道的唯一悬而未决的问题。

    改进: 我想添加多个“区域”(例如,每个文档一个区域,因此从一个文档拖动到另一个文档可以使表行看起来像表行,但是在文档窗口之外的任何地方都可以将它们变成文件图标,即la hfs promise drag)。总有一天…

    设计: 文章本身详细说明了设计背后的推理和相对简单的变形效果(交叉淡入淡出加上大小是使用基本的动画等)。代码(类以及演示应用程序)被完全屏蔽并注释掉。

    不会链接到我自己的帖子,但会喜欢我的努力上升投票的业力。 ;-)

    更新 :从10.7起提供类似(但更好的集成)功能。如果您的目标是10.7或更高版本,最好使用新的API。jlndrageffectmanager在10.7上工作正常,因此它可以用于早期的目标版本。

        2
  •  5
  •   Saurabh Sharan    16 年前

    JNLDragEffectManager 就是这样。:)

        3
  •  3
  •   Ken    16 年前

    API不支持这种情况。Joshua Nozzi给出了一个看起来合理的方法 this weblog post .

    ib的效果不是那么好。这是一个交叉淡入淡出和缩放。按住SHIFT键,看得更清楚。

        4
  •  2
  •   Jay    12 年前

    从10.7+开始,当前方法是使用

       enumerateDraggingItemsWithOptions:
                                 forView:
                                 classes:
                           searchOptions:
                              usingBlock:
    

    应用程序接口 NSDraggingInfo . 文档非常糟糕,但是ADC示例 多光场 桌面视图操场 可以很好地了解如何使用新的机制。