文档章节

利用UIActivityController调用ios 系统自带的分享功能,实现微信发布多图的功能

云飞扬v5
 云飞扬v5
发布于 2016/07/24 19:34
字数 771
阅读 5061
收藏 2

最近的一个需求是如何用app,在微信朋友圈发布不带app显示名称的多图。

 

通过一番查找以后找到一个类UIActivityController,可以调用系统的social.framework中的分享接口。看下面的图就知道了,这个还是挺常见的

 

 

 

微信发布多图

借鉴了CSDN上的一个demo,

 

里面自定义了一个实现UIActivityItemSource协议的类 ShareItem

//
//  SharedItem.h
//  xingjiang
//
//  Created by 吴德明 on 16/7/14.
//  Copyright © 2016年 吴德明. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>


@interface SharedItem : NSObject<UIActivityItemSource>

-(instancetype)initWithData:(UIImage*)img andFile:(NSURL*)file;

@property (nonatomic, strong) UIImage *img;
@property (nonatomic, strong) NSURL *path;

@end

 

实现文件

 

//
//  SharedItem.m
//  xingjiang
//
//  Created by 吴德明 on 16/7/14.
//  Copyright © 2016年 吴德明. All rights reserved.
//

#import "SharedItem.h"

@implementation SharedItem

-(instancetype)initWithData:(UIImage *)img andFile:(NSURL *)file
{
    self = [super init];
    if (self) {
        _img = img;
        _path = file;
    }
    return self;
}

-(instancetype)init
{
    //不期望这种初始化方式,所以返回nil了。
    return nil;
}

#pragma mark - UIActivityItemSource
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
    return _img;
}

-(id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
    return _path;
}

-(NSString*)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType
{
    // 这里对我这分享图好像没啥用....   是的 没啥用....
    return @"";
}

 

实际调用的代码

//
//  ViewController.m
//  ShareItemWX
//
//  Created by 吴德明 on 16/7/14.
//  Copyright © 2016年 吴德明. All rights reserved.
//

#import "ViewController.h"
#import "SharedItem.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    
    UIButton *Button = [UIButton buttonWithType:UIButtonTypeCustom];
    Button.frame = CGRectMake(0, 0, 100, 100);
    Button.center = self.view.center;
    Button.backgroundColor = [UIColor blueColor];
    [Button setTitle:@"分享到微信" forState:UIControlStateNormal];
    [Button addTarget:self action:@selector(shareWX) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:Button];
    
    
    
}

 /** 分享到微信 以九宫格的方式*/
-(void)shareWX{
     /** 图片网址数组*/
    NSArray *array_photo = @[@"http://img.meifajia.com/o1aneipt09eCl5bqQp4ifbQdTHlKIJfq.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt2fbZm38Zct4DH92p-ez7-fXt.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneiocd24Y6jK8uQA8-8y-47H6vRe7.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneiocdd94h6ld4kQJh8PcpjGSkORS.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneiocdd94h6ld4kQJh8PcpjGSkORS.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt09eCl5bqQp4ifbQdTHlKIJfq.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneioccpacV1LVg2AfG9fbYl8zN1So.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt0haf1zwepSkxx9okI0W34t05.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt09eCl5bqQp4ifbQdTHlKIJfq.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt09eCl5bqQp4ifbQdTHlKIJfq.jpg?imageView2/1/w/360/h/480/q/85",@"http://img.meifajia.com/o1aneipt09eCl5bqQp4ifbQdTHlKIJfq.jpg?imageView2/1/w/360/h/480/q/85"];
    
    
    
    NSMutableArray *array = [[NSMutableArray alloc]init];
    for (int i = 0; i <8 && i<array_photo.count; i++) {
        NSString *URL = array_photo[i];
        NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:URL]];
        UIImage *imagerang = [UIImage imageWithData:data];
        
        NSString *path_sandox = NSHomeDirectory();
        NSString *imagePath = [path_sandox stringByAppendingString:[NSString stringWithFormat:@"/Documents/ShareWX%d.jpg",i]];
        [UIImagePNGRepresentation(imagerang) writeToFile:imagePath atomically:YES];
        
        NSURL *shareobj = [NSURL fileURLWithPath:imagePath];
        
         /** 这里做个解释 imagerang : UIimage 对象  shareobj:NSURL 对象 这个方法的实际作用就是 在调起微信的分享的时候 传递给他 UIimage对象,在分享的时候 实际传递的是 NSURL对象 达到我们分享九宫格的目的 */
        
        SharedItem *item = [[SharedItem alloc] initWithData:imagerang andFile:shareobj];
        
        [array addObject:item];
    }

    
    UIActivityViewController *activityViewController =[[UIActivityViewController alloc] initWithActivityItems:array
                                                                                        applicationActivities:nil];
    
    //尽量不显示其他分享的选项内容
    
    activityViewController.excludedActivityTypes = @[ UIActivityTypePostToFacebook,UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypePrint,UIActivityTypeCopyToPasteboard,UIActivityTypeAssignToContact,UIActivityTypeSaveToCameraRoll,UIActivityTypeAddToReadingList,UIActivityTypePostToFlickr,UIActivityTypePostToVimeo,UIActivityTypePostToTencentWeibo,UIActivityTypeAirDrop,UIActivityTypeOpenInIBooks];
    
    if (activityViewController) {
          [self presentViewController:activityViewController animated:TRUE completion:nil];
    }

   
    

}





@end

 

 

最终效果

中间用户的操作步骤

app界面

 

 

 

第一步

 

 

第二步

 

 

第三步写评论

 

ios 版本9.2.1

微信版本6.3.22

© 著作权归作者所有

共有 人打赏支持
云飞扬v5
粉丝 12
博文 105
码字总数 67465
作品 0
金华
加载中

评论(10)

A
Answer-D
请问为什么带拷贝二字的点击了没反应呢,比如拷贝到微信
闻术苑
闻术苑
十分感谢,用你的方法成功了~~
云飞扬v5
云飞扬v5

引用来自“甜甜饭”的评论

大神,我在分享的时候会提示plugin com.tencent.xin.sharetimeline invalidated、plugin com.apple.reminders.RemindersEditorExtension invalidated,这是怎么回事? 我只是分享了链接,没有分享图片。
没遇到过这种情况,你百度看看吧:smiley:
甜甜饭
大神,我在分享的时候会提示plugin com.tencent.xin.sharetimeline invalidated、plugin com.apple.reminders.RemindersEditorExtension invalidated,这是怎么回事? 我只是分享了链接,没有分享图片。
云飞扬v5
云飞扬v5

引用来自“CocoLC”的评论

可以了,图片组大小有限制的。:joy:
以前也遇到过类似的坑
CocoLC
CocoLC
可以了,图片组大小有限制的。:joy:
CocoLC
CocoLC
8张以上就不能了:flushed:
CocoLC
CocoLC
大神,微信朋友没问题,分享到朋友圈点击发送就没反应了,怎么回事这是
云飞扬v5
云飞扬v5

引用来自“甜甜饭”的评论

大神,请问如果分享链接到QQ,链接是自己设计的,应该怎么设计才能分享缩略图呢?
这块目前还没有了解过,有空看看:smile:
甜甜饭
大神,请问如果分享链接到QQ,链接是自己设计的,应该怎么设计才能分享缩略图呢?
腾讯开源基于 mmap 的高性能 key-value 组件 MMKV

腾讯微信团队宣布开源 MMKV ,这是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,主打高性能和稳定性。MMKV 从 2015 年中至今,在 iOS 微信上使用已有近 3 ...

王练
09/22
0
0
一篇文章get微信开源移动端数据库组件WCDB的一切!

1、前言 微信团队已于2017年06月09日正式开源了微信自用的移动端数据库组件 WCDB(WeChat Database),详见《[资讯] 微信正式开源移动端数据库组件WCDB!》。 WCDB是微信终端的第三个开源项目...

jsjsjjs
2017/07/22
0
0
记录一次vue2.0(history模式)下微信自定义分享的坑

吐槽:关于微信自定义分享前前后后翻了文档两三遍,感觉大佬们写文档都是这么潇洒么?躲在角落里的我瑟瑟发抖了两天..... 下面我们(带着愤怒)来看微信文档来进行开发:传送门 1. 根据文档来...

One day,
09/05
0
0
App打开微信小程序并传递参数

在App中打开小程序的功能发布有一段时间了,网上关于这个的新闻很多,但是技术资料并不多,我们有项目需要尝试这种方式,特意试了一下,发现还是有一些坑,分享给大家。 首先微信官方文档在微...

voxer
06/12
0
0
js在微信、微博、QQ、Safari唤起App的解决方案

背景 最近在做微信、QQ、微博中使用js唤起App,之前也做过类似的功能,不过比较粗糙,考虑的情况不太全,而且那已经是很久之前的事情了,很多技术都已过时,现在有体验更好,功能更加完善的唤...

发布于
08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache Spark 2.3 重要特性介绍

本文翻译自:https://databricks.com/blog/2018/02/28/introducing-apache-spark-2-3.html 为了继续实现 Spark 更快,更轻松,更智能的目标,Spark 2.3 在许多模块都做了重要的更新,比如 St...

hblt-j
17分钟前
1
0
Git基本操作

Git基本操作 git add . git commit git commit -m "updata" git log查看日志 git checkout xxx 切换分支到xxx 常用命令 版本库管理 创建版本库 # 初始化版本库mkdir learngit && cd learng...

lslaiwy
21分钟前
1
0
ubuntu 彻底删除 mysql 然后重装 mysql

ubuntu 彻底删除 mysql 然后重装 mysql 删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt-get autoremove mysql-server sudo apt-......

关上越
24分钟前
1
0
Fabric.js高级点的教程3--添加遮罩和裁剪的方法

写这篇文章的时候我就要说一下了,这个遮罩和裁剪耗费了我真的是九牛二虎之力 裁剪的插件很多,无论你用原生JS,JQuery, Vue还是React.总能找到一款裁剪插件。今天我要说的是自己写一个截图功...

xmqywx
26分钟前
1
0
springboot 初始化不设置数据源 由接口动态设置数据源(传入ip 端口 数据库名称 账号 密码)

程序无需重启可以加个过滤器支持未设置数据库无法调用将配置存到property文件,也可存到缓存设置时需要一个工具类判断传入的数据库是否可连接等import org.apache.commo...

林伟琨
33分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部