2018-02-26

UIActivityViewController系統(tǒng)原生分享

先上效果圖新蟆,諸位請看:

效果1.gif

效果2.gif

接下來介紹UIActivityViewController:

1. 創(chuàng)建要分享的數(shù)據(jù)內(nèi)容疲吸,加在一個數(shù)組 ActivityItems里锁右。NSString *textToShare =@"我是且行且珍惜_iOS今豆,歡迎關注我扰付!";UIImage *imageToShare = [UIImage imageNamed:@"wang.png"];NSURL *urlToShare = [NSURL URLWithString:@"https://github.com/wslcmk"];NSArray *activityItems = @[urlToShare,textToShare,imageToShare];//自定義 customActivity繼承于UIActivity,創(chuàng)建自定義的Activity加在數(shù)組Activities中校套。? customActivity * custom = [[customActivity alloc] initWithTitie:@"且行且珍惜_iOS" withActivityImage:[UIImage imageNamed:@"wang"] withUrl:urlToShare withType:@"customActivity" withShareContext:activityItems];NSArray *activities = @[custom];

這里需要注意:不同的 Activity 類型所支持的數(shù)據(jù)類型不同,當不支持時蔬充,應用程序支持的系統(tǒng)服務按鈕就不會出現(xiàn)蝶俱,比如說打印、添加書簽饥漫,榨呆,,庸队,

不同的 Activity 類型所支持的數(shù)據(jù)類型.png

/**2. //創(chuàng)建分享視圖控制器积蜻,初始化UIActivityViewController ActivityItems 在執(zhí)行activity中用到的數(shù)據(jù)對象數(shù)組。數(shù)組中的對象類型是可變的彻消,并依賴于應用程序管理的數(shù)據(jù)竿拆。例如,數(shù)據(jù)可能是由一個或者多個字符串/圖像對象宾尚,代表了當前選中的內(nèi)容丙笋。 Activities 是一個UIActivity對象的數(shù)組,代表了應用程序支持的自定義服務煌贴。這個參數(shù)可以是nil御板。 */UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:activities];

// 分享功能(Facebook, Twitter, 新浪微博, 騰訊微博...)需要你在手機上設置中心綁定了登錄賬戶, 才能正常顯示。//關閉系統(tǒng)的一些Activity類型,不需要的功能關掉牛郑。 activityVC.excludedActivityTypes = @[UIActivityTypePostToVimeo ];//Activity 類型又分為“操作”和“分享”兩大類/*

UIKIT_EXTERN NSString *const UIActivityTypePostToFacebook? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypePostToTwitter? ? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypePostToWeibo? ? ? ? NS_AVAILABLE_IOS(6_0);? ? //SinaWeibo

UIKIT_EXTERN NSString *const UIActivityTypeMessage? ? ? ? ? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypeMail? ? ? ? ? ? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypePrint? ? ? ? ? ? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypeCopyToPasteboard? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypeAssignToContact? ? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypeSaveToCameraRoll? NS_AVAILABLE_IOS(6_0);

UIKIT_EXTERN NSString *const UIActivityTypeAddToReadingList? NS_AVAILABLE_IOS(7_0);

UIKIT_EXTERN NSString *const UIActivityTypePostToFlickr? ? ? NS_AVAILABLE_IOS(7_0);

UIKIT_EXTERN NSString *const UIActivityTypePostToVimeo? ? ? ? NS_AVAILABLE_IOS(7_0);

UIKIT_EXTERN NSString *const UIActivityTypePostToTencentWeibo NS_AVAILABLE_IOS(7_0);

UIKIT_EXTERN NSString *const UIActivityTypeAirDrop? ? ? ? ? ? NS_AVAILABLE_IOS(7_0);

*/

3.//判斷系統(tǒng)版本,初始化點擊回調(diào)方法if([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0){//初始化Block回調(diào)方法,此回調(diào)方法是在iOS8之后出的怠肋,代替了之前的方法UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError) {NSLog(@"activityType :%@", activityType);if (completed) {NSLog(@"completed"); }else {NSLog(@"cancel"); } };// 初始化completionHandler,當post結(jié)束之后(無論是done還是cancell)該blog都會被調(diào)用 activityVC.completionWithItemsHandler = myBlock;}else{//此Block回調(diào)方法在iOS8.0之后就棄用了淹朋,被上面的所取代UIActivityViewControllerCompletionHandler myBlock = ^(NSString *activityType,BOOL completed) {NSLog(@"activityType :%@", activityType);if (completed) {NSLog(@"completed"); }else {NSLog(@"cancel"); } };// 初始化completionHandler笙各,當post結(jié)束之后(無論是done還是cancell)該blog都會被調(diào)用 activityVC.completionHandler = myBlock;}4.//在展現(xiàn)view controller時,必須根據(jù)當前的設備類型础芍,使用適當?shù)姆椒ㄨ厩馈T趇Pad上,必須通過popover來展現(xiàn)view controller者甲。在iPhone和iPodtouch上春感,必須以模態(tài)的方式展現(xiàn)。[self presentViewController:activityVC animated:YES completion:nil];

接下來介紹幾個系統(tǒng)Activity 類型的API虏缸,用于自定義title鲫懒、Image的時候用。

- (void)SystemAPI{//復制鏈接功能UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];pasteboard.string =@"需要復制的內(nèi)容";//用safari打開網(wǎng)址[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/wslcmk"]];//保存圖片到相冊UIImage *image = [UIImage imageNamed:@"wang"];id completionTarget =self;SEL completionSelector =@selector(didWriteToSavedPhotosAlbum);void *contextInfo =NULL;UIImageWriteToSavedPhotosAlbum(image, completionTarget, completionSelector, contextInfo);//添加書簽NSURL *URL = [NSURL URLWithString:@"https://github.com/wslcmk"];BOOL result = [[SSReadingList defaultReadingList] addReadingListItemWithURL:URL? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title:@"WSL"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? previewText:@"且行且珍惜_iOS"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? error:nil];if (result) {NSLog(@"添加書簽成功");}//發(fā)送短信MFMessageComposeViewController *messageComposeViewController = [[MFMessageComposeViewController alloc] init];messageComposeViewController.recipients = @[@"且行且珍惜_iOS"];//messageComposeViewController.delegate = self;messageComposeViewController.body =@"你好刽辙,我是且行且珍惜_iOS窥岩,請多指教!";messageComposeViewController.subject =@"且行且珍惜_iOS";//發(fā)送郵件MFMailComposeViewController *mailComposeViewController = [[MFMailComposeViewController alloc] init];[mailComposeViewController setToRecipients:@[@"mattt@nshipster?com"]];[mailComposeViewController setSubject:@"WSL"];[mailComposeViewController setMessageBody:@"Lorem ipsum dolor sit amet"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? isHTML:NO];if([MFMailComposeViewController? canSendMail]){? ? [self presentViewController:mailComposeViewController animated:YES completion:nil];};//發(fā)送推文TWTweetComposeViewController *tweetComposeViewController =[[TWTweetComposeViewController alloc] init];[tweetComposeViewController setInitialText:@"夢想還是要有的,萬一實現(xiàn)了呢!-----且行且珍惜_iOS"];[tweetComposeViewController addURL:[NSURL URLWithString:@"https://github.com/wslcmk"]];[tweetComposeViewController addImage:[UIImage imageNamed:@"wang"]];if ([TWTweetComposeViewController canSendTweet]) {? ? [self presentViewController:tweetComposeViewController animated:YES completion:nil];

}

}

接下來介紹自定義UIActivity宰缤,主要就是重寫了以下方法:

+ (UIActivityCategory)activityCategory{// 決定在UIActivityViewController中顯示的位置颂翼,最上面是AirDrop晃洒,中間是Share,下面是ActionreturnUIActivityCategoryAction;}

- (NSString *)activityType{return _type;}

- (UIImage *)_activityImage {//這個得注意朦乏,當self.activityCategory = UIActivityCategoryAction時球及,系統(tǒng)默認會渲染圖片,所以不能重寫為 - (UIImage *)activityImage {return _image;}return _image;}

- (NSURL *)activityUrl{return _url;}

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {returnYES;}

- (void)prepareWithActivityItems:(NSArray *)activityItems {//準備分享所進行的方法呻疹,通常在這個方法里面吃引,把item中的東西保存下來,items就是要傳輸?shù)臄?shù)據(jù)。;}

- (void)performActivity {//這里就可以關聯(lián)外面的app進行分享操作了//也可以進行一些數(shù)據(jù)的保存等操作//操作的最后必須使用下面方法告訴系統(tǒng)分享結(jié)束了[self activityDidFinish:YES];}

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刽锤,一起剝皮案震驚了整個濱河市镊尺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌并思,老刑警劉巖庐氮,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宋彼,居然都是意外死亡弄砍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門宙暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來输枯,“玉大人,你說我怎么就攤上這事占贫。” “怎么了先口?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵型奥,是天一觀的道長。 經(jīng)常有香客問我碉京,道長厢汹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任谐宙,我火速辦了婚禮烫葬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘凡蜻。我一直安慰自己搭综,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布划栓。 她就那樣靜靜地躺著兑巾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪忠荞。 梳的紋絲不亂的頭發(fā)上蒋歌,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天帅掘,我揣著相機與錄音,去河邊找鬼堂油。 笑死修档,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的府框。 我是一名探鬼主播萍悴,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寓免!你這毒婦竟也來了癣诱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤袜香,失蹤者是張志新(化名)和其女友劉穎撕予,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜈首,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡实抡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了欢策。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆寨。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踩寇,靈堂內(nèi)的尸體忽然破棺而出啄清,到底是詐尸還是另有隱情,我是刑警寧澤俺孙,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布辣卒,位于F島的核電站,受9級特大地震影響睛榄,放射性物質(zhì)發(fā)生泄漏荣茫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一场靴、第九天 我趴在偏房一處隱蔽的房頂上張望啡莉。 院中可真熱鬧,春花似錦旨剥、人聲如沸咧欣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽该押。三九已至,卻和暖如春阵谚,著一層夾襖步出監(jiān)牢的瞬間蚕礼,已是汗流浹背烟具。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奠蹬,地道東北人朝聋。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像囤躁,于是被迫代替她去往敵國和親冀痕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容