簡體   English   中英

在ios8中使用共享擴展名共享圖像

[英]Share image using share extension in ios8

嗨,我正在開發一個社交網絡應用程序 我需要使用我的應用API擴展程序來共享圖像。 我正在通過目標C而不是Swift開發我的應用程序。 任何人都可以幫我解決這個問題。

在目標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;
                     }
                 }];
        }
    }
}

注意 - 此代碼僅用於演示,擴展應該快速且輕量級,並且在加載圖像時不會阻止UI線程,在實際應用程序中,您將在后台執行此操作。

指定擴展程序何時顯示

默認情況下,只要出現UIActivityViewController菜單,現在就會顯示擴展名,以指定擴展應該出現在哪些場景中,您需要在NSExtension,NSExtensionAttributes,NSExtensionActivationRule下的擴展名info.plist中設置正確的值您可以找到可用的擴展這里的鍵: 信息屬性列表鍵參考

請注意,默認行為是在所有鍵都適用時顯示擴展名,這意味着如果指定NSExtensionActivationSupportsImageWithMaxCountNSExtensionActivationSupportsMovieWithMaxCount則只有當用戶共享圖像電影而不是圖像或電影時,才會顯示擴展名。 要編寫為少數共享數據類型之一顯示的擴展,請在此處查看

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

聲明共享或操作擴展的支持數據類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM