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

Tam*_*ing 3 objective-c ios

嗨,我正在开发一个社交网络应用程序 我需要使用我的应用API扩展程序来共享图像.我正在通过目标C而不是Swift开发我的应用程序.任何人都可以帮我解决这个问题.

Mic*_*elB 5

在目标C中创建共享扩展

  1. 应用扩展程序必须包含应用内容 - 您不能只创建要从商店下载的应用扩展程序,首先要创建一个包含应用扩展程序的常规应用.为了这个演示,只需创建一个新的单一视图项目并保持不变.转到File-> New-> Project并选择iOS下的单视图应用程序- > Applications将其命名为'ExtendableApp'.

  2. 转到文件 - >新建 - >目标并选择iOS下的共享扩展- >应用程序扩展称之为'myShareExtension'这将为您的项目添加共享扩展目标.

  3. 扩展ShareViewController继承自SLComposeServiceViewController,SLComposeServiceViewController已经具有带文本框,图像视图和"取消"和"发布"按钮的视图以及一些其他功能,如字符数,配置,内容验证.

    如果您想创建自定义体验,只需将ShareViewController设置为从UIViewController继承,一旦您的扩展被激活,将调用所有常规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;
                     }
                 }];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意 - 此代码仅用于演示,扩展应该快速且轻量级,并且在加载图像时不会阻止UI线程,在实际应用程序中,您将在后台执行此操作.

指定扩展程序何时显示

默认情况下,只要出现UIActivityViewController菜单,现在就会显示扩展名,以指定扩展应该出现在哪些场景中,您需要在NSExtension,NSExtensionAttributes,NSExtensionActivationRule下的扩展名info.plist中设置正确的值您可以找到可用的扩展这里的键: 信息属性列表键参考

请注意,默认行为是您的扩展程序在所有键都适用时显示,这意味着如果您指定NSExtensionActivationSupportsImageWithMaxCount并且NSExtensionActivationSupportsMovieWithMaxCount您的扩展程序仅在用户共享图像和电影而不是图像或电影时出现.要编写为少数共享数据类型之一显示的扩展,请在此处查看

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

声明共享或操作扩展的支持数据类型