2018-02-26

UIActivityViewController系统原生分享

先上效果图,诸位请看:

效果1.gif

效果2.gif

接下来介绍UIActivityViewController:

1. 创建要分享的数据内容,加在一个数组 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,创建自定义的Activity加在数组Activities中。  customActivity * custom = [[customActivity alloc] initWithTitie:@"且行且珍惜_iOS" withActivityImage:[UIImage imageNamed:@"wang"] withUrl:urlToShare withType:@"customActivity" withShareContext:activityItems];NSArray *activities = @[custom];

这里需要注意:不同的 Activity 类型所支持的数据类型不同,当不支持时,应用程序支持的系统服务按钮就不会出现,比如说打印、添加书签,,,,

不同的 Activity 类型所支持的数据类型.png

/**2. //创建分享视图控制器,初始化UIActivityViewController ActivityItems 在执行activity中用到的数据对象数组。数组中的对象类型是可变的,并依赖于应用程序管理的数据。例如,数据可能是由一个或者多个字符串/图像对象,代表了当前选中的内容。 Activities 是一个UIActivity对象的数组,代表了应用程序支持的自定义服务。这个参数可以是nil。 */UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:activities];

// 分享功能(Facebook, Twitter, 新浪微博, 腾讯微博...)需要你在手机上设置中心绑定了登录账户, 才能正常显示。//关闭系统的一些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.//判断系统版本,初始化点击回调方法if([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0){//初始化Block回调方法,此回调方法是在iOS8之后出的,代替了之前的方法UIActivityViewControllerCompletionWithItemsHandler myBlock = ^(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError) {NSLog(@"activityType :%@", activityType);if (completed) {NSLog(@"completed"); }else {NSLog(@"cancel"); } };// 初始化completionHandler,当post结束之后(无论是done还是cancell)该blog都会被调用 activityVC.completionWithItemsHandler = myBlock;}else{//此Block回调方法在iOS8.0之后就弃用了,被上面的所取代UIActivityViewControllerCompletionHandler myBlock = ^(NSString *activityType,BOOL completed) {NSLog(@"activityType :%@", activityType);if (completed) {NSLog(@"completed"); }else {NSLog(@"cancel"); } };// 初始化completionHandler,当post结束之后(无论是done还是cancell)该blog都会被调用 activityVC.completionHandler = myBlock;}4.//在展现view controller时,必须根据当前的设备类型,使用适当的方法。在iPad上,必须通过popover来展现view controller。在iPhone和iPodtouch上,必须以模态的方式展现。[self presentViewController:activityVC animated:YES completion:nil];

接下来介绍几个系统Activity 类型的API,用于自定义title、Image的时候用。

- (void)SystemAPI{//复制链接功能UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];pasteboard.string =@"需要复制的内容";//用safari打开网址[[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(@"添加书签成功");}//发送短信MFMessageComposeViewController *messageComposeViewController = [[MFMessageComposeViewController alloc] init];messageComposeViewController.recipients = @[@"且行且珍惜_iOS"];//messageComposeViewController.delegate = self;messageComposeViewController.body =@"你好,我是且行且珍惜_iOS,请多指教!";messageComposeViewController.subject =@"且行且珍惜_iOS";//发送邮件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];};//发送推文TWTweetComposeViewController *tweetComposeViewController =[[TWTweetComposeViewController alloc] init];[tweetComposeViewController setInitialText:@"梦想还是要有的,万一实现了呢!-----且行且珍惜_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时,系统默认会渲染图片,所以不能重写为 - (UIImage *)activityImage {return _image;}return _image;}

- (NSURL *)activityUrl{return _url;}

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

- (void)prepareWithActivityItems:(NSArray *)activityItems {//准备分享所进行的方法,通常在这个方法里面,把item中的东西保存下来,items就是要传输的数据。;}

- (void)performActivity {//这里就可以关联外面的app进行分享操作了//也可以进行一些数据的保存等操作//操作的最后必须使用下面方法告诉系统分享结束了[self activityDidFinish:YES];}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容