【问题标题】:Cocoa: How to morph a drag image while draggingCocoa:如何在拖动时变形拖动图像
【发布时间】:2011-01-17 04:42:48
【问题描述】:

在 Interface Builder.app(和其他一些可可应用程序)中,图像拖动具有非常漂亮/性感的效果,当您将可拖动项目拖出其窗口时会变形拖动图像。

例如在Interface Buildler.app中:

  1. 显示库调色板(⇧⌘L,或工具菜单 -> 库)
  2. 将项目拖出库调色板

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

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

但是,我找不到在拖动时进行此图像变形的钩子。我通过覆盖返回初始拖动图像

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

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

如何表示要替换当前拖动图像(最好使用性感变形效果)。

【问题讨论】:

    标签: objective-c cocoa macos drag-and-drop


    【解决方案1】:

    你们打败了我。 :-)

    是的,JLNDragEffectManager 是开源的(请在您的应用中注明出处),并且可以在我的博客上找到。它应该可以正常工作,无需修改回 10.5,但我不确定是否会更进一步。其他人链接到它(而且它很容易在 google 上搜索),所以为了避免自我祝贺的博客链接,我将保留它。

    问题: 一位开发人员评论(并提交代码修复)缺乏拖动偏移支持。我只是没有时间发布更新。这是我知道的唯一悬而未决的问题。

    改进:我想添加多个“区域”(例如,每个文档一个,因此从 doc 拖动到 doc 会使表格行看起来像表格行,但在 doc 窗口之外的任何地方都会将它们变成进入一个文件图标,一个 HFS Promise Drag)。总有一天……

    设计: 帖子本身详细说明了设计背后的原因和相对简单的变形效果(交叉淡入淡出加尺寸使用基本 NSAnimation 等进行动画处理)。代码(类以及演示应用程序)被彻底屏蔽和注释。

    不会链接到我自己的帖子,但会喜欢为我的努力点赞的因果报应。 ;-)

    更新:从 10.7 开始提供类似(但集成度更高)的功能。如果您的目标是 10.7 或更高版本,最好使用新的 API。 JLNDragEffectManager 在 10.7 上运行良好,因此可用于早期目标版本。

    【讨论】:

    • 非常感谢 Joshua。这工作得很好。另外,很棒的博文! :) 不要以为您有指向上述 dragoffset 修复程序的链接?
    • 如果您最终使用了这个类,请告诉我,我会将您的应用添加到源页面的列表中。
    【解决方案2】:

    JNLDragEffectManager 正是这样做的。 :)

    【讨论】:

      【解决方案3】:

      API 不能很好地支持这一点。 Joshua Nozzi 给出了一个在this weblog post 中看起来合理的方法。

      IB 的效果并没有那么花哨。这是一个交叉淡入淡出和规模。按住 shift 可以更清楚地看到它。

      【讨论】:

        【解决方案4】:

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

           enumerateDraggingItemsWithOptions:
                                     forView:
                                     classes:
                               searchOptions:
                                  usingBlock:
        

        NSDraggingInfo 上的 API。文档确实很差,但是像 MultiPhotoFrameTableViewPlayground 这样的 ADC 示例可以很好地说明如何使用新机制。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-27
          • 2011-09-30
          • 1970-01-01
          • 2010-12-05
          • 2013-02-16
          • 2010-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多