美文网首页iOS
iOS UIActivityController调用ios 系统

iOS UIActivityController调用ios 系统

作者: ShanJiJi | 来源:发表于2016-09-02 17:31 被阅读2911次

    摘要
    类似于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

    相关文章

      网友评论

      • 19dfa6bcdb2c:弱弱的问一句 如何在js上调用
      • 4843bdf5a828:如何跳过底部弹窗选择这一项,直接打开微信分享的面板?
        JeffShi_3dd1:@DylanCat 太厉害了,解决了我的问题,我打算给你发个红包
        a83aca5e011f:这里有一个demo 有问题的同学可以看一下

        可以实现弹出选择界面
        或者不弹出选择界面,直接选择微信分享

        https://github.com/TsnumiDC/TSShareHelper
      • 做个稻草人:能自动获取分享标题吗?求解。。。
      • A_d72a:为什么微信分享提示不支持此类型
        A_d72a:点击下去什么都没有
      • 鱼与熊掌不能兼得:如何设定分享标题?不用自己输入
      • 詹小白:不能分享网页那种吗
      • 禾子_____:如何设定分享标题?不用自己输入

      本文标题:iOS UIActivityController调用ios 系统

      本文链接:https://www.haomeiwen.com/subject/ctqkettx.html