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);
Другие вопросы по тегам