在ios8中使用共享扩展共享图像

您好我正在开发一个社交networking应用程序。 在那我需要分享图像使用扩展到我的应用程序API。 我正在通过目标C而不是Swift开发我的应用程序。 任何机构都可以帮助我解决这个问题。

在目标C中创build共享扩展

  1. 应用程序扩展程序必须包含应用程序 – 您不能只创build要从商店下载的应用程序扩展程序,请首先创build一个常规应用程序来包含应用程序扩展程序。 为了这个演示的目的,创build一个新的单一视图项目,并保持不变。 转到文件 – >新build – >项目,然后selectiOS下的单一视图应用程序 – >应用程序将其称为“ExtendableApp”。

  2. 转到文件 – >新build – >目标,然后select共享扩展iOS– >应用程序扩展称为“myShareExtension”,这将添加共享扩展目标到您的项目。

  3. 扩展ShareViewController从SLComposeServiceViewControllerinheritance,它已经有一个带有文本框,图像视图和“取消”和“后”button和一些其他function,如字符数,configuration,内容validation视图。

    如果您想创build自定义体验,只需将您的ShareViewController设置为从UIViewControllerinheritance,一旦您的扩展被激活,所有常规的viewDidLoad,viewDidAppear等将被调用。

在安装包含应用程序之后的这一刻,您将能够在UIActivityViewController菜单中看到“myShareExtension”

获取共享的UIImage

在viewDidAppear的ShareViewController.mm中,使用以下命令获取图像

-(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; } }]; } } } 

注意 – 这个代码只是为了演示,扩展应该是快速和轻量级的,而不是在加载图像时阻塞UI线程,在实际应用中,您可以在后台执行此操作。

指定分机何时显示

默认情况下,每当UIActivityViewController菜单出现时,扩展就会显示出来,指定扩展应该出现在哪些场景中,你需要在NSExtension,NSExtensionAttributes,NSExtensionActivationRule下扩展info.plist中设置适当的值。你可以find可用的解除键: 信息属性列表键参考

请注意,只要所有键都适用,就会出现默认行为,这意味着如果指定了NSExtensionActivationSupportsImageWithMaxCountNSExtensionActivationSupportsMovieWithMaxCount ,那么只有当用户共享图像电影而不是图像或电影时,您的扩展才会出现。 要写一个扩展名,看看是否有一个共享的数据types,看看这里

http://bryan.io/post/97658826431/what-we-learned-building-the-tumblr-ios-share-extension

为共享或操作扩展声明支持的数据types