我正在尝试使用Swift 4将多个NSImages复制到粘贴板上-就像这样:
private func putItemsOnPasteboard (_ items: [Int]) {
if let images = mainImageController?.getNSImages(for: items) {
NSPasteboard.general.clearContents()
NSPasteboard.general.writeObjects(images)
if let c = NSPasteboard.general.pasteboardItems?.count {
print (c)
}
}
}NSImage实现了NSPasteboardWriting,它工作得很好。问题是,如果我随后粘贴到邮件中,它只粘贴第一张图像,而我正在努力找出原因。
例如,如果我使用三个图像调用函数,它看起来都可以工作,并且我的诊断'print (c)‘正确地显示为'3’。但如果我粘贴到邮件(或OneNote等)它只粘贴第一张图片。
我知道Mail支持粘贴多个图像,因为我可以在Apple Photos中选择三个缩略图,将它们复制到粘贴板上,它会正确地将三个都粘贴到Mail中。
任何线索都将不胜感激!
发布于 2018-03-02 13:50:13
如果我在Photos中复制一组照片,然后检查粘贴板类型,我会得到:
import Cocoa
print(NSPasteboard.general.types?.map { $0.rawValue } ?? [])输出:
["dyn.ah62d4rv4gu8ywyc2nbu1g7dfqm10c6xekr1067dwr70g23pw", "IPXPasteboardController", "com.apple.PhotoPrintProduct.photoUUID", "public.file-url", "CorePasteboardFlavorType 0x6675726C", "dyn.ah62d4rv4gu8y6y4grf0gn5xbrzw1gydcr7u1e3cytf2gn", "NSFilenamesPboardType", "dyn.ah62d4rv4gu8yc6durvwwaznwmuuha2pxsvw0e55bsmwca7d3sbwu", "Apple URL pasteboard type"]在这些类型中,对我来说看起来很有趣的是public.file-url,它表明Photos正在将一组URL复制到粘贴板上。让我们测试一下这个假设:
import Cocoa
print(NSPasteboard.general.readObjects(forClasses: [NSURL.self], options: nil) ?? [])输出:
[file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e03/UNADJUSTEDNONRAW_thumb_1e03.jpg, file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e04/UNADJUSTEDNONRAW_thumb_1e04.jpg, file:///Users/*deleted*/Pictures/Photos%20Library.photoslibrary/resources/proxies/derivatives/1e/00/1e05/kOBCUhzGRcyeVfBCC8VfvQ_thumb_1e05.jpg]输出是一个指向JPEG文件的URL列表,这表明Photos确实提供了一个URL列表,并将这些URL放在粘贴板上。因此,也许你可以将NSImage的TIFF表示保存到一个临时位置,然后将这些临时文件的URL写到粘贴板上,这样就可以了。
发布于 2018-03-09 02:32:00
Charles Srstka的回答在这里非常有帮助。看来,虽然您可以在粘贴板上放置多个NSImages,但您只能粘贴一个。
Swift的URL对象不符合NSPasteboardWriting,但NSURL符合,并且它没有只能粘贴一个的限制。
所以这个方法起作用了
private func putImagesOnPasteboard (_ images: [Image], folderURL: URL) {
let imageURLs = images.map() {
image in
return NSURL (fileURLWithPath: folderURL.appendingPathComponent(image.fileName).path)
}
NSPasteboard.general.clearContents()
NSPasteboard.general.writeObjects(imageURLs)
}https://stackoverflow.com/questions/49061858
复制相似问题