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

标签 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 的应用程序中看到过这种行为,所以我知道可以访问剪贴板并将图像复制到其中,然后用户可以将其粘贴到他们喜欢的任何地方 - 但我的图像似乎永远无法正确复制到剪贴板,或者它们不会在我的应用程序之外保留。

最佳答案

问题是您在 setData:forPasteboardType: 方法中传递了错误的类型

你必须传递一个 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);

关于ios - Objective-C:将图像从文件复制到设备粘贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25267694/

相关文章:

java - 如何在文本周围应用 css 边框

python : multithread doesn't improve run time

ios - 为什么从不调用 updatedTransactions?

ios - ViewController.Type 没有成员名称 'answerOne' - SWIFT

iOS,如何在 Apple Watch 上缓存文件

iphone - 在 UISplitViewController 中重用详细 View Controller

objective-c - NSDictionary 到 UITableView

iphone - 如何更改导航栏上 UIBarButtonItem 的字体颜色/文本颜色

ios - tableView viewForHeaderInSection 从 ios7 中的第 1 节开始

java - 图像的差异/补丁