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

LFSystemShareUtil.h

#import <Foundation/Foundation.h>
#import <Social/Social.h> typedef NS_ENUM(NSInteger, LFSystemShareType) {
LFSystemShareWeChat,//微信
LFSystemShareQQ,//腾讯QQ
LFSystemShareSina,//新浪微博
}; typedef NS_ENUM(NSInteger, LFSystemShareState) {
LFSystemShareStateCancel,//取消
LFSystemShareStateDone,//完成
LFSystemShareStateNone,//未安装
}; @interface LFSystemShareUtil : NSObject /**
直接分享到某平台 @param type 平台
@param controller 弹出分享界面的控制器
@param items 可以仅分享图@[UIImage],可以放多张;或者仅分享纯视频、音乐@[NSURL];或者一个带文字和缩略图的网页@[NSURL,NSString,UIImage],等等,总之把要分享的东西放到数组即可
@param shareResult LFSystemShareState
*/
+ (void)shareWithType:(LFSystemShareType)type controller:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(LFSystemShareState state))shareResult; /**
通过选择平台的控制面板分享 @param controller 弹出分享界面的控制器
@param items 可以仅分享图@[UIImage],可以放多张;或者仅分享纯视频、音乐@[NSURL];或者一个带文字和缩略图的网页@[NSURL,NSString,UIImage],等等,总之把要分享的东西放到数组即可
@param shareResult 结果回调
*/
+ (void)shareWithController:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError))shareResult; @end

LFSystemShareUtil.m

#import "LFSystemShareUtil.h"

@implementation LFSystemShareUtil

+ (void)shareWithType:(LFSystemShareType)type controller:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(LFSystemShareState state))shareResult {
NSString *serviceType = @"";
switch (type){
case LFSystemShareWeChat:
serviceType = @"com.tencent.xin.sharetimeline";
break;
case LFSystemShareQQ:
serviceType = @"com.tencent.mqq.ShareExtension";
break;
case LFSystemShareSina:
serviceType = @"com.apple.share.SinaWeibo.post";
break;
default:
break;
} /*
<NSExtension: 0x1741735c0> {id = com.apple.share.Flickr.post}",
"<NSExtension: 0x174173740> {id = com.taobao.taobao4iphone.ShareExtension}",
"<NSExtension: 0x174173a40> {id = com.apple.reminders.RemindersEditorExtension}",
"<NSExtension: 0x174173bc0> {id = com.apple.share.Vimeo.post}",
"<NSExtension: 0x174173ec0> {id = com.apple.share.Twitter.post}",
"<NSExtension: 0x174174040> {id = com.apple.mobileslideshow.StreamShareService}",
"<NSExtension: 0x1741741c0> {id = com.apple.Health.HealthShareExtension}",
"<NSExtension: 0x1741744c0> {id = com.apple.mobilenotes.SharingExtension}",
"<NSExtension: 0x174174640> {id = com.alipay.iphoneclient.ExtensionSchemeShare}",
"<NSExtension: 0x174174880> {id = com.apple.share.Facebook.post}",
"<NSExtension: 0x174174a00> {id = com.apple.share.TencentWeibo.post}
*/ /*
"<NSExtension: 0x174174340> {id = com.tencent.xin.sharetimeline}", //微信
"<NSExtension: 0x174173d40> {id = com.tencent.mqq.ShareExtension}", //QQ
"<NSExtension: 0x1741738c0> {id = com.apple.share.SinaWeibo.post}", //微博
*/ if ([SLComposeViewController isAvailableForServiceType:serviceType]) {
SLComposeViewController *composeVC = [SLComposeViewController composeViewControllerForServiceType:serviceType];
for ( id obj in items){
if ([obj isKindOfClass:[UIImage class]]){
[composeVC addImage:(UIImage *)obj];
}else if ([obj isKindOfClass:[NSURL class]]){
[composeVC addURL:(NSURL *)obj];
} else if ([obj isKindOfClass:[NSString class]]) {
[composeVC setInitialText:(NSString *)obj];
}
} // 弹出分享控制器
composeVC.completionHandler = ^(SLComposeViewControllerResult result) {
if (shareResult) {
shareResult((LFSystemShareState)result);
}
};
[controller presentViewController:composeVC animated:YES completion:nil];
} else {
if (shareResult) {
shareResult(LFSystemShareStateNone);
}
}
} + (void)shareWithController:(UIViewController *)controller andItems:(NSArray *)items completionHandler:(void(^)(NSString *activityType,BOOL completed,NSArray *returnedItems,NSError *activityError))shareResult {
UIActivityViewController *activityVC = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
//不出现在活动项目
activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypeAddToReadingList];
activityVC.completionWithItemsHandler = shareResult;
[controller presentViewController:activityVC animated:YES completion:nil];
} @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. smb windows中使用的文件共享协议(主要用于与windows互通)

    主要是samba服务. SMB协议又成为CIFS(Common Internet File System)协议 samba服务功能: 1文件共享 2打印共享 3加入windows2000/2003/2 ...

  2. AMD嵌入式G系列SoC协助优化Gizmo 2开发板

    http://www.gizmosphere.org/ AMD嵌入式G系列SoC协助优化Gizmo 2开发板 http://news.zol.com.cn/491/4910444.html

  3. IIS配置PHP环境(快速最新版)(转载+自创)

    (参考转载的) 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少. 特点是:稳定,但效率太低. 2.ISAPI方式加载 ...

  4. edittext 的一个案例

        <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...

  5. [New learn]GCD的基本使用

    https://github.com/xufeng79x/GCDDemo 1.简介 介绍GCD的使用,介绍多种队列与同步异步多种情况下的组合运行情况. 2.基本使用步骤 如果使用GCD则一般也就两个步 ...

  6. Winform利用委托进行窗体间的传值

    在form1.cs中 1.委托的定义 //定义一个委托 public delegate void AddUsrEventHandler(object sender, AddUsrEventHandle ...

  7. [ python ] 项目:haproxy配置文件增删改查

    1. 开发要求 实现对 haproxy.cfg 增删改查操作 2. 程序介绍 # 作者:hkey # 博客地址:https://www.cnblogs.com/hukey/p/9288279.html ...

  8. HIbernate学习笔记5 之 查询

    一.HQL查询 * 按条件查询,条件中写的是属性名,之后在query对象为添加赋值,如: String hql = " from User where uid=?"; Sessio ...

  9. django使用JWT保存用户登录信息

    在使用前必须弄明白JWT的原理,原理可以看我的另一篇博文:https://www.cnblogs.com/chichung/p/9966027.html JWT的流程 1.签发JWT 在用户正确输入账 ...

  10. Hive分组取第一条记录

    需求 交易系统,财务要求维护每个用户首个交易完成的订单数据(首单表,可取每个用户交易完成时间最老的订单数据).举例: 简写版的表结构: 表数据: 则 财务希望汇总记录如下: uid order_id ...