ixany
ixany

Reputation: 6070

How to implement SwiftUI’s .onDrag modifier with NSImage (macOS)

I am building a sandboxed app for macOS with SwiftUI. I have a NSImage that is displayed as Image(nsImage: myNSImage). I want that View to support drag and drop, meaning that it can be dragged to any location that can receive image files.

Here’s my approach:

Image(nsImage: myNSImage)
    .onDrag({
        let itemProvider = NSItemProvider()
        itemProvider.suggestedName = "image.png"
        itemProvider.registerDataRepresentation(for: UTType.png) {
            loadHandler in

            loadHandler(nsImage.pngRepresentation, nil)
            print("loadHandler completed") // Never prints !!
            return nil

        }
        return itemProvider
    })

This way I can drag the View. But it seems like it isn’t able to provide the image.

The “drop”, i.e. on the Desktop, is simply not working. I would expect that it saves an "image.png" in the destination URL, but it doesn’t.

How can I implement .onDrag so that it provides a image file based on NSImage?

Edit: I already have tried different UTTypes, for example .tiff in combination with nsImage.tiffRepresentation without luck.

Upvotes: 2

Views: 173

Answers (0)

Related Questions