美文网首页iOS Review技术开发程序员
iOS通过UIActivityViewController实现原

iOS通过UIActivityViewController实现原

作者: RainyHand | 来源:发表于2016-09-23 15:18 被阅读8439次

首先要说的是,为什么如此多的分享平台,可以直接集成各个平台的分享功能,还要来实现系统原生的分享功能。没办法,分享功能被微信大大禁用了,设计诱导用户分享,那就只能绕一个圈将内容分享出去,并且还不会影响现在APP的功能(分享就会得到报酬 ),UIActivityViewController就出来了,这是系统所带的原生的分享功能,在相册中我们肯定经常使用,可以将图片视频直接分享至我们需要的平台,或者保存至系统的剪切板,备忘录等。
1.简单实现

 NSString *textToShare = @"要分享的文本内容"; 

UIImage *imageToShare = [UIImage imageNamed:@"iosshare.jpg"]; 

NSURL *urlToShare = [NSURL URLWithString:@"http://www.baidu.com"];

 NSArray *activityItems = @[textToShare, imageToShare, urlToShare];

 UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:activityItems applicationActivities:nil];

<img src="http:https://img.haomeiwen.com/i1672724/b56ec05f115aeb56.png?" width=50 height=50 alt="举例"/>
模拟器截图所有没有微信图标。

2.参数介绍
activityItems是要分享的内容,包括图片、图片、网址。
但是在此要注意的是不是所有平台都支持这三种内容的分享,例如微信,不能同时分享图片和网址,文字不能直接往外分享,下图是几个平台分享概略


平台分享.png

第二个参数是一个UIActivity对象的数组,代表了应用程序支持的自定义服务。这个参数可以是nil。

  1. 当弹出视图框的时候,我们发现上边很多图标是我们用不到,我们可以将用不到的图标去掉,用到的函数是
 activityVC.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypePostToTwitter, UIActivityTypePostToWeibo,UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypeAddToReadingList,UIActivityTypePostToFlickr,UIActivityTypePostToVimeo,UIActivityTypePostToTencentWeibo,UIActivityTypeAirDrop,UIActivityTypeOpenInIBooks];

以上是将能去掉的都隐藏,以上都是系统默认的功能。
实现到这我们发现,其实这个功能可以分为两大类,操作和分享,在分享类中,我们可以分享到我们三方平台,还可以分享到系统的相册等平台,在操作类中,我们可以发现我们可以将文字等保存至剪贴板,消息等。
4.分享之后的回调
回调有两个函数,先说第一个

 UIActivityViewControllerCompletionHandler myBlock = ^(NSString *activityType,BOOL completed) { 

 NSLog(@"activityType :%@", activityType); 

 if (completed)  {   

 NSLog(@"completed");
  }  
else  {
   NSLog(@"cancel"); 
 } 

completionHandler,当post结束之后(无论是done还是cancell)该blog都会被调用
 activityVC.completionHandler = myBlock;

还有一个回调

typedef void (^UIActivityViewControllerCompletionWithItemsHandler)(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError);

returnedItems是一个包含NSExtensionItem对象的数组;activityError指出出错原因
当我们分享成功或者分项取消的时候,都活调用block函数
activityType:是分享到什么平台,如果是系统的平台,会打印系统枚举类中的名字,微信等三方平台会打印com.tencent.xin.sharetimeline
成功后completed为YES否则为NO。我们在成功后或者失败后调用我们需要执行的代码。
5.补充
UIActivity可以自定义,上边的图标以及按钮可以自己进行自定义,也可以实现与各大分享平台的对接。暂时没有用到,因此没有具体实现。

简单的实现功能就是如此,学习中,与君共勉。

相关文章

网友评论

  • 伦敦乡下的小作家:这个分享到微信,点击“返回应用”没反应啊,求支招
  • 逗留:怎么把显示url的文本改成自定义的文字?
  • 初衷难维:你好楼主,这种分享可以邮件分享,但是发件人如何设置,还有,邮件分享的话不能自动填充收件人,主题等信息。如何把邮件功能集成进来呢?就是点击分享中邮件的图标,弹出@impor t UIMessage的那种发送邮件界面?
  • BohrIsLay:如何去掉Reminder 和 Add to Notes?
  • 追赶阳光:ios11 分享点击第三方APP都没反应是咋回事啊
  • 佐墓秩之:微信分享能不能只分享文字啊,不要连接,会直接报错
  • Dylan大魔王:楼主写的很好,这里有个原生多图分享demo,可以跳过选择面板,互相学习
    https://github.com/TsnumiDC/TSShareHelper
    我的天空蔚蓝色:这个成功回调有问题
  • 动感超人丶:可不可以跳过选择操作和分享平台那个界面,直接进入微信和qq分享?因为默认第三方平台不展示出来,需要点击省略号把开关打开才看得见
  • 加拉隆的深渊之核:亲,这个自带的分享,如果想添加微信,要不要设置什么的呀?还是说只要手机上微信就有分享微信那个按钮?
    a83aca5e011f:https://github.com/TsnumiDC/TSShareHelper
    这里有个demo说不定能帮上你
  • 张小小白:怎么修改语言为中文呢?
  • 奋斗路上的奋青:分享到qq图片不对了,遇到了吗?怎么解决的?
    奋斗路上的奋青:分享本地图片+链接,微信分享正常,qq分享时图片不对,图片变成了链接里的一张图片
    RainyHand:@奋斗路上的奋青 测试分享qq没有出现问题,不知道你是哪一步出现问题
    RainyHand:@奋斗路上的奋青 明天我试一下,再跟你说
  • 有啊有:你好,可以给我个demo吗?1130341213@qq.com
    RainyHand:@有啊有哪里遇到问题了吗,
  • 小民:这个也需要在微信平台做配置吧
    RainyHand:@小民 你添加social框架了嘛,你添加试试,不行再联系我
    小民:@RainyHand 可不可以给一个demo,我按你的崩溃了。
    RainyHand:@小民 这个不需要
  • 小民:都是一些小知识点,不错
  • 阿一瑶:哈怕给

本文标题:iOS通过UIActivityViewController实现原

本文链接:https://www.haomeiwen.com/subject/afmtyttx.html