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

LFSystemShareUtil.h

  1. #import <Foundation/Foundation.h>
  2. #import <Social/Social.h>
  3.  
  4. typedef NS_ENUM(NSInteger, LFSystemShareType) {
  5. LFSystemShareWeChat,//微信
  6. LFSystemShareQQ,//腾讯QQ
  7. LFSystemShareSina,//新浪微博
  8. };
  9.  
  10. typedef NS_ENUM(NSInteger, LFSystemShareState) {
  11. LFSystemShareStateCancel,//取消
  12. LFSystemShareStateDone,//完成
  13. LFSystemShareStateNone,//未安装
  14. };
  15.  
  16. @interface LFSystemShareUtil : NSObject
  17.  
  18. /**
  19. 直接分享到某平台
  20.  
  21. @param type 平台
  22. @param controller 弹出分享界面的控制器
  23. @param items 可以仅分享图@[UIImage],可以放多张;或者仅分享纯视频、音乐@[NSURL];或者一个带文字和缩略图的网页@[NSURL,NSString,UIImage],等等,总之把要分享的东西放到数组即可
  24. @param shareResult LFSystemShareState
  25. */
  26. + (void)shareWithType:(LFSystemShareType)type controller:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(LFSystemShareState state))shareResult;
  27.  
  28. /**
  29. 通过选择平台的控制面板分享
  30.  
  31. @param controller 弹出分享界面的控制器
  32. @param items 可以仅分享图@[UIImage],可以放多张;或者仅分享纯视频、音乐@[NSURL];或者一个带文字和缩略图的网页@[NSURL,NSString,UIImage],等等,总之把要分享的东西放到数组即可
  33. @param shareResult 结果回调
  34. */
  35. + (void)shareWithController:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError))shareResult;
  36.  
  37. @end

LFSystemShareUtil.m

  1. #import "LFSystemShareUtil.h"
  2.  
  3. @implementation LFSystemShareUtil
  4.  
  5. + (void)shareWithType:(LFSystemShareType)type controller:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(LFSystemShareState state))shareResult {
  6. NSString *serviceType = @"";
  7. switch (type){
  8. case LFSystemShareWeChat:
  9. serviceType = @"com.tencent.xin.sharetimeline";
  10. break;
  11. case LFSystemShareQQ:
  12. serviceType = @"com.tencent.mqq.ShareExtension";
  13. break;
  14. case LFSystemShareSina:
  15. serviceType = @"com.apple.share.SinaWeibo.post";
  16. break;
  17. default:
  18. break;
  19. }
  20.  
  21. /*
  22. <NSExtension: 0x1741735c0> {id = com.apple.share.Flickr.post}",
  23. "<NSExtension: 0x174173740> {id = com.taobao.taobao4iphone.ShareExtension}",
  24. "<NSExtension: 0x174173a40> {id = com.apple.reminders.RemindersEditorExtension}",
  25. "<NSExtension: 0x174173bc0> {id = com.apple.share.Vimeo.post}",
  26. "<NSExtension: 0x174173ec0> {id = com.apple.share.Twitter.post}",
  27. "<NSExtension: 0x174174040> {id = com.apple.mobileslideshow.StreamShareService}",
  28. "<NSExtension: 0x1741741c0> {id = com.apple.Health.HealthShareExtension}",
  29. "<NSExtension: 0x1741744c0> {id = com.apple.mobilenotes.SharingExtension}",
  30. "<NSExtension: 0x174174640> {id = com.alipay.iphoneclient.ExtensionSchemeShare}",
  31. "<NSExtension: 0x174174880> {id = com.apple.share.Facebook.post}",
  32. "<NSExtension: 0x174174a00> {id = com.apple.share.TencentWeibo.post}
  33. */
  34.  
  35. /*
  36. "<NSExtension: 0x174174340> {id = com.tencent.xin.sharetimeline}", //微信
  37. "<NSExtension: 0x174173d40> {id = com.tencent.mqq.ShareExtension}", //QQ
  38. "<NSExtension: 0x1741738c0> {id = com.apple.share.SinaWeibo.post}", //微博
  39. */
  40.  
  41. if ([SLComposeViewController isAvailableForServiceType:serviceType]) {
  42. SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:serviceType];
  43. for ( id obj in items){
  44. if ([obj isKindOfClass:[UIImage class]]){
  45. [composeVC addImage:(UIImage *)obj];
  46. }else if ([obj isKindOfClass:[NSURL class]]){
  47. [composeVC addURL:(NSURL *)obj];
  48. } else if ([obj isKindOfClass:[NSString class]]) {
  49. [composeVC setInitialText:(NSString *)obj];
  50. }
  51. }
  52.  
  53. // 弹出分享控制器
  54. composeVC.completionHandler = ^(SLComposeViewControllerResult result) {
  55. if (shareResult) {
  56. shareResult((LFSystemShareState)result);
  57. }
  58. };
  59. [controller presentViewController:composeVC animated:YES completion:nil];
  60. } else {
  61. if (shareResult) {
  62. shareResult(LFSystemShareStateNone);
  63. }
  64. }
  65. }
  66.  
  67. + (void)shareWithController:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError))shareResult {
  68. UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
  69. //不出现在活动项目
  70. activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypeAddToReadingList];
  71. activityVC.completionWithItemsHandler = shareResult;
  72. [controller presentViewController:activityVC animated:YES completion:nil];
  73. }
  74.  
  75. @end

iOS 系统原生分享图片 文字 音乐 纯视频 网页的更多相关文章

  1. php表单提交 图片、音乐、视频、文字,四种类型共同提交到数据库

    这个问题一直困扰了我好几天,终于在今天让我给解决了,难以掩饰的激动. 其实在之前没有接触到这种问题,只是表单提交数据而已,再就是图片,四种类型同时提交还真是没遇到过,做了一个系统,其中有一个功能就是提 ...

  2. UIActivityViewController实现系统原生分享

    代码地址如下:http://www.demodashi.com/demo/11042.html 一.效果预览 二.接下来介绍UIActivityViewController,跟我动手做 1.创建要分享 ...

  3. HTML5:图片、音乐和视频

    图片.音乐和视频 一.图片 1.属性 属性 说明 alt 规定图像的替代文本. src 规定显示图像的 URL align 规定如何根据周围的文本来排列图像. border 定义图像周围的边框. he ...

  4. 微信朋友圈如何同时分享(图片+文字) Android版

    以下是:微信朋友圈SDK 分享图片的代码,但只能分享图片,不能分享文字,如何才能图片和文字同时分享?求各位大神指教! public class MainActivity extends Activit ...

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

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

  6. iOS开发-- 利用AVPlayer播放远程音乐和视频

    一.简单的播放音乐和视频,播放视频的工具栏需要自己写 二.利用老师封装的框架实现视频播放 链接:http://pan.baidu.com/s/1hrEKlus 密码:8e7g

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

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

  8. iOS系统原生二维码条形码扫描

    本文讲述如何用系统自带的东东实现二维码扫描的功能:点击当前页面的某个按钮,创建扫描VIEW.细心的小伙伴可以发现 title被改变了,返回按钮被隐藏了.这个代码自己写就行了,与本文关系不大...绿色的 ...

  9. Android APP 分享图片文字到微信刚開始正常,后面就不弹出分享框了

    依照官方的流程走了一遍.一切顺利,分享成功了.本来以为能够大功告成了,结果睡了一觉,第二天要给客户演示了.才发现TMD坑爹了,不能分享了,第三方的分享栏弹不出来了.我一阵惊慌,还好非常快找到了解决的方 ...

随机推荐

  1. Linux内核基础--事件通知链(notifier chain)【转】

    转自:http://blog.csdn.net/wuhzossibility/article/details/8079025 内核通知链 1.1. 概述 Linux内核中各个子系统相互依赖,当其中某个 ...

  2. 异步网络模块之aiohttp的使用(一)

    异步网络模块之aiohttp的使用(一) 平时我们也许用的更多的是requests模块,或者是requests_hml模块,但是他们都属于阻塞类型的不支持异步,速度很难提高,于是后来出现了异步的gre ...

  3. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  4. C语言比较巧妙的字符串分割程序

    在解析字符串时,能够解析的给出每个字符串的长度.内容.以及每个字符串的第一个字符的地址. short i; ; //切割之后的字符串的个数 ,ItemLen[],Idx[], ThCommandLen ...

  5. mui 怎样监听scroll事件的滚动距离

    var scroll = mui('.mui-scroll-wrapper').scroll(); document.querySelector('.mui-scroll-wrapper' ).add ...

  6. 【JBPM4】判断节点decision 方法1

    JPDL <?xml version="1.0" encoding="UTF-8"?> <process key="decision ...

  7. 【JBPM4】流程实例变量存取

    设置流程实例变量 //创建流程引擎 ProcessEngine processEngine = Configuration.getProcessEngine(); //获得执行服务 Execution ...

  8. AC日记——[SDOI2009]HH去散步 洛谷 P2151

    [SDOI2009]HH去散步 思路: 矩阵快速幂递推(类似弗洛伊德): 给大佬跪烂-- 代码: #include <bits/stdc++.h> using namespace std; ...

  9. AC日记——大爷的字符串题 洛谷 P3709

    大爷的字符串题 思路: 莫队,需开O2,不开50: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 20000 ...

  10. Java中多线程问题

    线程调度中的方法: sleep() 顾名思义线程休眠可传递连个参数-@毫秒 @纳秒 yield() 暂时挂起 这里的线程会释放资源,但是有一个坑是虽然是释放资源但是是公平竞争资源 如:a线程释放资源后 ...