Swift: перетащите из NSView, перейдите в Finder и сохраните файл

Я хочу добиться того, чтобы пользователи моего приложения могли перетаскивать NSView класс к Finder окна по их выбору, в результате чего файл изображения сохраняется по выбранному целевому пути.

Изображение имеет тип png это доступно как Data?, Я уже добился того, что NSView перетаскивается - пока все хорошо.

Но я не могу узнать, как сохранить файл изображения в выбранном месте. В настоящее время, когда я отпускаю мышь, консоль говорит: drop location is unavailable, Что мне не хватает?

public class IXDragView: IXView, NSDraggingSource, NSPasteboardItemDataProvider {
// IXView is a subclass of NSView. Nothing spectacular.


public override var mouseDownCanMoveWindow: Bool {
    return false
}


public func draggingSession(_ session: NSDraggingSession, sourceOperationMaskFor context: NSDraggingContext) -> NSDragOperation {
    return NSDragOperation.copy
}


public func pasteboard(_ pasteboard: NSPasteboard?, item: NSPasteboardItem, provideDataForType type: NSPasteboard.PasteboardType) {

    if let pb = pasteboard {
        pb.declareTypes([.png], owner: self)
        pb.setData(self.imageFile(ofType: .png), forType: .png) // .imageFile returns 'Data?'
    }

}


override public func mouseDown(with theEvent: NSEvent) {

    let pasteboardItem = NSPasteboardItem()
    pasteboardItem.setDataProvider(self, forTypes: [NSPasteboard.PasteboardType.png])

    let draggingItem = NSDraggingItem(pasteboardWriter: NSImage(data: self.imageFile(ofType: .png)!)!)
    draggingItem.setDraggingFrame(self.bounds, contents: snapshot())

    beginDraggingSession(with: [draggingItem], event: theEvent, source: self)
    dragPromisedFiles(ofTypes: ["png"], from: self.frame, source: self, slideBack: true, event: theEvent)

    super.mouseDown(with: theEvent)

}


public func draggingSession(_ session: NSDraggingSession, endedAt screenPoint: NSPoint, operation: NSDragOperation) {
    // This is called when mouse is released
    print("draggingSession")
}


   }

Я ценю любую помощь! С наилучшими пожеланиями

РЕДАКТИРОВАТЬ 1

Я нашел репозиторий на GitHub, написанный на Objective-C, который работает хорошо. Однако мне не удалось перевести его на Swift.

РЕДАКТИРОВАТЬ 2

Мне удалось заставить его работать - по крайней мере, по большей части. Но dragImage устарела. Это означает, что я не могу отобразить изображение перетаскиваемого файла. Есть ли альтернатива dragImage?

0 ответов

Другие вопросы по тегам