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
?