代码地址如下:
http://www.demodashi.com/demo/11042.html

一、效果预览

二、接下来介绍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 类型所支持的数据类型不同,当不支持时,应用程序支持的系统服务按钮就不会出现,比如说打印、添加书签,,,,

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];

5、接下来介绍几个系统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];
}
}

6、最后介绍自定义UIActivity,主要就是重写了以下方法:

+ (UIActivityCategory)activityCategory{
// 决定在UIActivityViewController中显示的位置,最上面是AirDrop,中间是Share,下面是Action
return UIActivityCategoryAction;} - (NSString *)activityType{
return _type;} - (NSString *)activityTitle {
return _title;} - (UIImage *)_activityImage {
//这个得注意,当self.activityCategory = UIActivityCategoryAction时,系统默认会渲染图片,所以不能重写为 - (UIImage *)activityImage {return _image;}
return _image;} - (NSURL *)activityUrl{
return _url;} - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
return YES;} - (void)prepareWithActivityItems:(NSArray *)activityItems {
//准备分享所进行的方法,通常在这个方法里面,把item中的东西保存下来,items就是要传输的数据。;} - (void)performActivity {
//这里就可以关联外面的app进行分享操作了
//也可以进行一些数据的保存等操作
//操作的最后必须使用下面方法告诉系统分享结束了
[self activityDidFinish:YES];}

三、项目结构列表

UIActivityViewController实现系统原生分享

代码地址如下:
http://www.demodashi.com/demo/11042.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

UIActivityViewController实现系统原生分享的更多相关文章

  1. 仿简书分享:UIActivityViewController系统原生分享

    接下来介绍UIActivityViewController: 1. 创建要分享的数据内容,加在一个数组 ActivityItems里. NSString *textToShare = @"我 ...

  2. iOS 系统原生分享图片 文字 音乐 纯视频 网页

    为了方便使用,我封装了一个分享的工具类LFSystemShareUtil.工程要引Social.framework. LFSystemShareUtil.h #import <Foundatio ...

  3. iOS原生分享功能

    iOS_系统原生分享 - CSDN博客 通过UIActivityViewController实现更多分享服务 - 简书 UIActivity - UIKit _ Apple Developer Doc ...

  4. 利用 Android 系统原生 API 实现分享功能

    利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...

  5. Android 不一样的原生分享

    Android做分享功能百度一下就两种方案,其一是用系统原生的Activity,最终弹出一个对话框,下面这种的还好,像右图的那种就嫌弃了,上面提供的应用也相对杂,还记得有次测试还给鄙人提了个Bug:建 ...

  6. Android 调用系统的分享[完美实现同一时候分享图片和文字]

    android 系统的分享功能 private void share(String content, Uri uri){ Intent shareIntent = new Intent(Intent. ...

  7. iOS系统原生 二维码的生成、扫描和读取(高清、彩色)

    由于近期工作中遇到了个需求:需要将一些固定的字段 在多个移动端进行相互传输,所以就想到了 二维码 这个神奇的东东! 现在的大街上.连个摊煎饼的大妈 都有自己的二维码来让大家进行扫码支付.可见现在的二维 ...

  8. 探索Android调用系统的分享功能

    非常多的应用为了应用的推广和传播都会使用"分享"的功能,点击分享button.就能将想要分享的内容或者图片分享至QQ空间.微博.微信朋友圈等实现了分享功能的应用.这篇文章主要是为了 ...

  9. 捕捉AVPlayerViewController 系统原生工具栏的出现、隐藏事件

    需求前提 1. app内轻量级的视频播放功能,故不希望引入“过度开发.过度封装”的第三方控件组,使用原生的AVPlayerViewController 2. 工具栏有新增控件需求,如下载按钮 等 3. ...

随机推荐

  1. 背包问题(dp基础)

    题目描述: 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2……Wn(Wi为整数),与之相对应的价值为P1,P2……Pn(Pi为整数).求背包能够容纳的最大价值. Input 第1 ...

  2. 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)

    3994: [SDOI2015]约数个数和 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...

  3. JZYZOJ1383 [usaco2003feb]impster 位运算 最短路

    http://172.20.6.3/Problem_Show.asp?id=1383  找能到达某个状态的最小操作数,然后把所有状态扫一遍即可,要额外判定一下起始就有的状态(如果起始里没有0那么这些状 ...

  4. 【后缀自动机】【拓扑排序】【动态规划】hihocoder1457 后缀自动机四·重复旋律7

    解题方法提示 小Hi:我们已经学习了后缀自动机,今天我们再来看这道有意思的题. 小Ho:好!这道题目让我们求的是若干的数字串所有不同子串的和. 小Hi:你能不能结合后缀自动机的性质来思考如何解决本题? ...

  5. 【FFT卷积】BZOJ3527-力

    [题目大意] [思路] 很好这很FFT…… 想了半天也没明白到底什么是卷积∑的上下界,我当初学的时候没说一定要从0开始啊quq 我还是背不出FFT的模板我要狗带了 我上面写的什么乱七八糟的,要什么数学 ...

  6. Spring MVC 工作流程详解

    1.首先先来一张图 开始流程----------------> 1.用户发送请求到前端控制器,前端控制器会过滤用户的请求,例如我们在web.xml里面配置的内容: <!-- 配置Sprin ...

  7. 微信自动抢红包android实现

    AccessibilityService-微信自动抢红包 2018年02月01日 16:09:06 阅读数:1757 在领导发红包的时候,看到有些同事在1s.2s抢到红包,为什么他们能够这么快?一定是 ...

  8. iOS:创建单例对象的两种方式

    单例模式:创建单例对象的两种方式 方式一:iOS4版本之前      static SingleClassManager *singleManager = nil;      +(SingleClas ...

  9. go语言基础之安装go开发环境和beego

    1.install gogo1.11.4.windows-amd64.msi  #默认安装就可以 2.golandgoland-2018.2.2.exe 安装完成,不要运行软件. 软件下载:https ...

  10. string c++ 转义序列

    std::string shaderVS = "\struct PSInput \{ \float4 position : SV_POSITION;\float4 color : COLOR ...