iOS UIActivityController調用ios 系統自帶的分享功能,實現微信發布多圖的功能

摘要
類似于app store的分享功能,給個截圖大家就知道了。 關鍵詞 UIActivityItemSource,UIActivityController

最近的一個需求是如何用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界面


第一步


第二步


第三步寫評論


原文鏈接:http://my.oschina.net/u/2360054/blog/717203

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容