2010-02-15 138 views
6

在Interface Builder.app(以及其他一些可可應用程序)中,圖像拖拽具有非常好的/性感的效果,可以在拖動可拖動項目時將拖拽圖像變形。可可:如何在拖拽時變形拖拽圖像

例如在接口Buildler.app:

  1. 顯示圖書館調色板(⇧⌘L,或工具菜單 - >庫)
  2. 拖出庫調色板項目

注意:將項目拖出庫調色板窗口時,它會從原始列表項目的圖像變形爲拖動項目的圖標圖像。

我完全實現了使用普通Cocoa NSDragSource/NSDragDestination工具在我的應用程序中拖放。

但是,我無法找到拖動時做圖像變形的鉤子。我通過覆蓋返回初始拖動圖像

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

但是這隻在拖動的開始處被調用。

你如何表示你想要替換當前的拖動圖像(理想情況下使用性感變形效果)。

回答

12

你們打我吧。 :-)

是的,JLNDragEffectManager是開源的(請在您的應用程序中署名),並可在我的博客上找到。它應該可以正常工作,不需要修改到10.5,但我不確定會再回來。其他人聯繫在一起(並且很容易googleable),所以爲了避免自我祝賀的博客鏈接,我將在此處留下。

問題:一位開發人員評論(並提交代碼修復)缺少拖動偏移量支持。我只是沒有到處發佈更新。這是我意識到的唯一突出問題。

改進:我想添加多個「區」(比如,每一個文件,從文檔到文檔,這樣一直拖到表格行看起來像錶行,但外面的文檔窗口的任何地方把它們轉化成一個文件圖標la HFS Promise Drag)。有一天......

設計:該帖子本身詳細介紹了設計背後的原因和相對簡單的變形效果(交叉漸變加大小動畫使用基本的NSAnimation等)。代碼(類以及演示應用程序)被徹底屏蔽並評論。

不會鏈接到我自己的帖子,但會喜歡upvotes的業力爲我的努力。 ;-)

UPDATE:類似(但更好的集成)功能可爲10.7。如果您的目標是10.7或更高,則最好使用新的API。 JLNDragEffectManager在10.7上正常工作,所以它可以用於早期目標版本。

+0

許多人都感謝約書亞。這工作很好。另外,偉大的博客文章! :) 不要假設您有鏈接到上述的dragoffset修復程序? – 2010-02-16 00:20:57

+0

如果您最終使用此課程,請告訴我,我會將您的應用添加到源頁面上的列表中。 – 2010-07-05 18:54:16

3

API不支持這一點。 Joshua Nozzi給出了一種在this weblog post中看起來合理的方法。

IB的效果不是那麼奇特。這是一個交叉淡入和縮放。按住Shift鍵可以更清晰地看到它。

2

由於10.7+目前的做法是使用

enumerateDraggingItemsWithOptions: 
          forView: 
          classes: 
         searchOptions: 
          usingBlock: 

API上NSDraggingInfo。該文檔是非常差,但ADC樣本像MultiPhotoFrameTableViewPlayground可以給如何使用新機制一個好主意。