[英]Share image using share extension in ios8
嗨,我正在開發一個社交網絡應用程序 我需要使用我的應用API擴展程序來共享圖像。 我正在通過目標C而不是Swift開發我的應用程序。 任何人都可以幫我解決這個問題。
應用擴展程序必須包含應用內容 - 您不能只創建要從商店下載的應用擴展程序,首先要創建一個包含應用擴展程序的常規應用。 為了這個演示,只需創建一個新的單一視圖項目並保持不變。 轉到File-> New-> Project並選擇iOS下的單視圖應用程序 - > Applications將其命名為'ExtendableApp'。
轉到文件 - >新建 - >目標並選擇iOS下的共享擴展 - >應用程序擴展稱之為'myShareExtension'這將為您的項目添加共享擴展目標。
擴展ShareViewController繼承自SLComposeServiceViewController,SLComposeServiceViewController已經具有帶文本框,圖像視圖和“取消”和“發布”按鈕的視圖以及一些其他功能,如字符數,配置,內容驗證。
如果您想創建自定義體驗,只需將ShareViewController設置為從UIViewController繼承,一旦您的擴展被激活,將調用所有常規viewDidLoad,viewDidAppear等。
在安裝包含應用程序之后,您已經可以在UIActivityViewController菜單中看到“myShareExtension”了
在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中設置正確的值您可以找到可用的擴展這里的鍵: 信息屬性列表鍵參考
請注意,默認行為是在所有鍵都適用時顯示擴展名,這意味着如果指定NSExtensionActivationSupportsImageWithMaxCount
和NSExtensionActivationSupportsMovieWithMaxCount
則只有當用戶共享圖像和電影而不是圖像或電影時,才會顯示擴展名。 要編寫為少數共享數據類型之一顯示的擴展,請在此處查看
http://bryan.io/post/97658826431/what-we-learned-building-the-tumblr-ios-share-extension
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.