Objective-C: копировать изображения из файла на устройство
У меня есть файл изображения (.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"];
Я также попробовал несколько вариантов, например, установив свойство 'image' следующим образом:
UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
pasteBoard.image = <someImg>
Однако, когда я покидаю приложение и пытаюсь вставить то, что я скопировал, вне приложения, оно действует так, как будто я вообще ничего не копировал в буфер обмена и вставляет то, что ранее скопировал.
Если я хочу разрешить пользователям копировать изображение в буфер обмена, а затем оставить свое приложение и вставить эти изображения через текст или по электронной почте, является ли UIPasteboard правильным способом обработки этого? Я видел такой тип поведения в другом приложении под названием " SMS Rage Faces", поэтому я знаю, что можно получить доступ к буферу обмена и скопировать в него изображение, которое пользователи затем смогут вставлять в любое удобное для него место, но мои изображения никогда не копируются должным образом. буфер обмена, или они не сохраняются за пределами моего приложения.
1 ответ
Проблема в том, что вы передаете неправильный тип внутри 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);