Objective-C:将图像从文件复制到设备粘贴板

时间:2014-08-12 15:00:49

标签: ios objective-c image clipboard

我有一个图像文件(.png)保存到应用程序的文档目录中,我希望用户能够将其复制到设备粘贴板。这里的目标是允许他们在复制图像并将其粘贴到应用程序之外的某个位置(例如短信或电子邮件)后离开应用程序。

以下是我尝试将图片复制到UIPasteboard的内容:

NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *path = [docsDirectory stringByAppendingPathComponent:@"testscreen.png"];

NSData *data = [NSData dataWithContentsOfFile:convertedFilePath];
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.persistent = true;
[pasteBoard setData:data forPasteboardType:@"public.png"];

我也尝试了一些变体,例如设置'图像'属性如下:

UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.image = <someImg>

但是,当我离开应用程序并尝试粘贴我在应用程序之外复制的内容时,就好像我根本没有将任何内容复制到剪贴板并粘贴我之前复制的内容。

如果我想允许用户将图像复制到剪贴板然后离开我的应用程序并通过文本或电子邮件粘贴这些图像,UIPasteboard是否正确处理此问题?我在另一个名为SMS Rage Faces的应用程序中看到了这种类型的行为,所以我知道可以访问剪贴板并将图像复制到用户,然后用户可以将它们粘贴到任何地方 - 但我的图像似乎永远不会正确复制到剪贴板,或者它们不会在我的应用程序之外保留。

1 个答案:

答案 0 :(得分:1)

问题是你在setData:forPasteboardType:method

中输入了错误的类型

您必须传递一个UTI,您可以从文件扩展名中获取(假设扩展名与实际文件类型匹配)。 做这样的事情:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

CFStringRef uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)@"png", NULL);

[pasteboard setData:[NSData dataWithContentsOfFile:yourData] forPasteboardType:(__bridge NSString *)uti];

if (uti)
    CFRelease(uti);