UIActivityViewController 牛刀小試:iOS 8 一鍵分享

今天想把社交分享的功能完成,但由于孤陋寡聞沒(méi)聽(tīng)說(shuō)過(guò)這個(gè)類(lèi),搜索了幾個(gè)幾年前的第三方庫(kù)來(lái)完成這個(gè)功能,甚至還花了大半個(gè)小時(shí)在源代碼里看別人怎么實(shí)現(xiàn)的,還沒(méi)瞧出來(lái)的時(shí)候搜索到了 UIActivityViewController,要是有人提點(diǎn)就不用花費(fèi)這么長(zhǎng)時(shí)間了。不過(guò)話也說(shuō)回來(lái),搜索的關(guān)鍵字精準(zhǔn)度不高,我用的是 iOS 8 social share api??偹阏业搅寺?,以后得注意學(xué)習(xí)下專(zhuān)業(yè)術(shù)語(yǔ),不然有 google 也不會(huì)用。另外,寫(xiě)這篇文章來(lái)記錄的時(shí)候也發(fā)現(xiàn)還有 Social 框架專(zhuān)用于社交媒體分享;去年 iOS 8 的一個(gè)重大的新功能擴(kuò)展(EXtension)也支持分享功能。最近學(xué)習(xí) WWDC 和 Swift,越發(fā)覺(jué)得 iOS8 是個(gè)非常重大的版本更新,特別是對(duì)開(kāi)發(fā)者,可惜,我到現(xiàn)在也沒(méi)接觸過(guò)多少。今天先講UIActivityViewController吧。

UIActivityViewController 使用起來(lái)非常簡(jiǎn)單,可分享的去處多了去了,需要我們寫(xiě)的也沒(méi)有幾行代碼,蘋(píng)果已經(jīng)完成了大部分的底層代碼。不過(guò),我也注意到?jīng)]法集成 Facebook 和 twitter,搜索發(fā)現(xiàn)這個(gè)問(wèn)題很普遍而且至今沒(méi)有得到有效解決,看這里:No FB and TW share icon on iOS 7, 最新的回答表示在 iOS 8.3 上也沒(méi)有解決,即使在真機(jī)上設(shè)置好了相關(guān)帳號(hào)。但是,Photos 里是可以用的,即使沒(méi)有設(shè)置帳號(hào)也會(huì)進(jìn)一步提示設(shè)置帳號(hào)。蘋(píng)果,你又不厚道了,好東西都自己留著,扔個(gè)閹割版出來(lái)給開(kāi)發(fā)者。

示例:
最簡(jiǎn)單的配置只需要設(shè)置好需要分享的數(shù)據(jù),可以是文本信息、圖像和鏈接,支持的服務(wù)都會(huì)提供。

NSString *info = @"share test";
UIImage *image=[UIImage imageNamed:@"UIBarButtonItemGrid.png"];
NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
NSArray *postItems=@[info, image, url];

UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:postItems applicationActivities:nil];
//controller.excludedActivityTypes = @[UIActivityTypePostToFacebook];    
//if iPhone
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    [self presentViewController:controller animated:YES completion:nil];
}
//if iPad
else {
    // Change Rect to position Popover
    UIBarButtonItem *shareBarButtonItem = self.navigationItem.leftBarButtonItem;
    UIPopoverController *popup = [[UIPopoverController alloc] initWithContentViewController:controller];
    [popup presentPopoverFromBarButtonItem:shareBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}

進(jìn)階設(shè)置:
1.生成實(shí)例時(shí)提供一組 UIActivity 對(duì)象來(lái)提供自定義的服務(wù)。
2.配置 completionWithItemsHandler 屬性使得完成了操作或是取消操作后執(zhí)行其他收尾動(dòng)作。
3.配置 excludedActivityTypes 來(lái)指定不需要提供的操作。

在 iPad 上UIActivityViewController 以 popover 的方式顯示(但顯然蘋(píng)果有更好的顯示方式,Modal 模式,看 Photos 里的頁(yè)面,不厚道+1),不然會(huì)有運(yùn)行時(shí)錯(cuò)誤:UIActivityViewController crashing on iOS8 iPads。在 iOS 8 里UIActivityViewController 的這種顯示方式是以新類(lèi)UIPopoverPresentation Controller 為基礎(chǔ)的。popover 方式需要一個(gè)掛靠點(diǎn), UIPopoverPresentationController支持三種方式來(lái)設(shè)置掛靠點(diǎn):
1.barButtonItem
2.sourceView
3.sourceRect

NSHipster 上這篇文章對(duì) UIActivityViewController 解析得很深入:社交分享只是小試牛刀而已,該類(lèi)的真正用處是為不同服務(wù)提供數(shù)據(jù)傳輸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容