1

我制作了自定义拖动图像并正在使用它。

一个问题是当我拖动项目项目的原点时变成一个空白区域。

我想将原始图像(?)留在原点。

所以我的收藏视图看起来什么也没发生。(当然,鼠标指针下有自定义图像正在拖动。)

请给我一个提示。

谢谢你。

文字很难解释所以我画了一张XD

自定义图像

更新 我的解决方案

  1. 继承 NSCollectionView 进行覆盖func beginDraggingSession(with items: [NSDraggingItem], event: NSEvent, source: NSDraggingSource) -> NSDraggingSession
  2. 获取选定的 indexex
  3. 在循环选定的索引时,制作 NSDraggingItem 并替换来自方法的 arg 的项目,即索引处的内容。此时,如果您制作图像并使用setDraggingFrame拖动设置它,则鼠标指针下的图像将成为您的图像(我没有测试其他方式)并且collectionView将与拖动前一样。

更新 2

我再次阅读代码,发现解决方案实际上很简单。(但我认为这不是可推荐的解决方案......)

override func beginDraggingSession(with items: [NSDraggingItem], event: NSEvent, source: NSDraggingSource) -> NSDraggingSession {
    //...
    // reload your table data again here
    return super.beginDraggingSession(with: newItems, event: event, source: source)
}

并且您需要自己计算需要删除和消失的项目。

4

0 回答 0