Поделиться изображением с помощью расширения поделиться в ios8
Привет, я разрабатываю одно приложение для социальной сети. В этом я потребовал поделиться изображением, используя расширение для моего приложения API. Я разрабатываю свое приложение с целью C, а не Swift. Может ли тело помочь мне решить эту проблему.
1 ответ
Создание расширения общего ресурса в задаче C
Расширение приложения должно содержать содержащее приложение - вы не можете просто создать расширение приложения для загрузки из магазина, сначала создайте обычное приложение, содержащее расширение приложения. Ради этой демонстрации просто создайте новый проект с одним представлением и оставьте его без изменений. Перейдите в Файл-> Создать-> Проект и выберите Приложение с одним представлением под iOS -> Приложения, называемые "ExtendableApp".
Перейдите в File->New-> Target и выберите Share Extension под iOS -> Application Extensions, назовите его "myShareExtension", это добавит цель расширения Share в ваш проект.
Расширение ShareViewController наследуется от SLComposeServiceViewController, который уже имеет View с текстовым полем, изображениями и кнопками "Отмена" и "Опубликовать", а также некоторыми другими функциями, такими как подсчет символов, конфигурация, проверка содержимого.
Если вы хотите создать свой пользовательский интерфейс, просто настройте свой ShareViewController на наследование от UIViewController. Как только ваше расширение будет активировано, будут вызываться все обычные viewDidLoad, viewDidAppear и т. Д.
На этом этапе после установки содержащего вас приложения вы уже сможете видеть "myShareExtension" в меню UIActivityViewController.
Получить общий UIImage
В вашем ShareViewController.mm в viewDidAppear используйте следующее, чтобы получить изображение
-(void)viewDidAppear:(BOOL)animated
{
for (NSItemProvider* itemProvider in ((NSExtensionItem*)self.extensionContext.inputItems[0]).attachments )
{
if([itemProvider hasItemConformingToTypeIdentifier:@"public.image"])
{
[itemProvider loadItemForTypeIdentifier:@"public.image" options:nil completionHandler:
^(id<NSSecureCoding> item, NSError *error)
{
UIImage *sharedImage = nil;
if([(NSObject*)item isKindOfClass:[NSURL class]])
{
sharedImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:(NSURL*)item]];
}
if([(NSObject*)item isKindOfClass:[UIImage class]])
{
sharedImage = (UIImage*)item;
}
}];
}
}
}
Примечание. Этот код предназначен только для демонстрации, расширения должны быть быстрыми и легкими и не блокировать поток пользовательского интерфейса при загрузке изображения, в реальном приложении это можно сделать в фоновом режиме.
Укажите, когда появится расширение
по умолчанию расширение теперь будет отображаться всякий раз, когда появляется меню UIActivityViewController, чтобы указать, в каких сценариях должно появиться расширение, вам нужно установить правильные значения в расширении info.plist в разделах NSExtension, NSExtensionAttributes, NSExtensionActivationRule. Вы можете найти декументацию доступных ключи здесь: Информация Список свойств Ключ Ссылка
Обратите внимание, что поведение по умолчанию для вашего расширения появляется, когда применяются все ключи, это означает, что если вы укажете NSExtensionActivationSupportsImageWithMaxCount
а также NSExtensionActivationSupportsMovieWithMaxCount
Ваше расширение появится только тогда, когда пользователь поделится как изображением, так и фильмом, а не изображением или фильмом. Чтобы написать расширение, которое появляется для одного из нескольких общих типов данных, смотрите здесь
http://bryan.io/post/97658826431/what-we-learned-building-the-tumblr-ios-share-extension
Объявление поддерживаемых типов данных для расширения общего ресурса или действия