ios原生分享功能

简介

在不使用第三方的情况下,采用系统原生的方法,实现分享功能。有两种方式,一种是使用UIActivityViewController,另外一种是使用Social框架中的SLComposeViewController。二者的效分别果如下:
方式一的效果:

ios原生分享功能_第1张图片
QQ.png

方式二的效果:


ios原生分享功能_第2张图片
QQ.png

说明:方式一在选择完分享平台后,会来到图二中做进一步选择。也就是说,方式二其实是跳过了前面的选择面板,直接分享。
导入#import
注意:从ios11开始,系统不允许跳过前面的选择面板直接来到图二(实际上是来到了但立刻被dismiss了),所以,ios11后只能采用第一种方式!

方式一介绍

//  点击分享后 执行
-(void)clickShare{

    NSArray * items =  self.SharePic;    //分享图片 数组

    UIActivityViewController * activityCtl = [[UIActivityViewController alloc]initWithActivityItems:items applicationActivities:nil];
    
    //去除一些不需要的图标选项
    activityCtl.excludedActivityTypes = @[UIActivityTypePostToFacebook,UIActivityTypeAirDrop];
        
    [self presentViewController:activityCtl animated:YES completion:nil];

    return YES;
}

  • excludedActivityTypes 的 可选项:
    UIActivityTypePostToFacebook,
    UIActivityTypePostToTwitter,
    UIActivityTypePostToWeibo,
    UIActivityTypeMessage,
    UIActivityTypeMail,
    UIActivityTypePrint,
    UIActivityTypeCopyToPasteboard,
    UIActivityTypeAssignToContact,
    UIActivityTypeSaveToCameraRoll,
    UIActivityTypeAddToReadingList,
    UIActivityTypePostToFlickr,
    UIActivityTypePostToVimeo,
    UIActivityTypePostToTencentWeibo,
    UIActivityTypeAirDrop,
    UIActivityTypeOpenInIBooks

方式二介绍

//  点击分享后 执行
-(void)clickShare{
    NSArray * items =  self.SharePic;    //分享图片 数组

    //  确定分享服务类型(微信、QQ... ...)
    NSString * serviceType = [self getServiceTypeWithType];

    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];
        }
    }
    
    // 添加要分享的文字
    [composeVC setInitialText:@"分享"];
    
    // 设置 分享操作回调
    composeVC.completionHandler = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultDone) {
            NSLog(@"----点击了发送");
        }
        else if (result == SLComposeViewControllerResultCancelled)
        {
            NSLog(@"----点击了取消");
        }
    };
    
    @try{
        //  弹出分享框
        [self presentViewController:composeVC animated:YES completion:nil];
        return YES;
    } 
    @catch (NSException *exception){
        NSLog(@"没有安装微信");    // 捕获 异常
        return NO;
    } 
    @finally {
        
    }
    
    return YES;
}
  • 主流的serviceType可选项 :
    serviceType = @"com.tencent.xin.sharetimeline";//微信
    serviceType = @"com.tencent.mqq.ShareExtension";//QQ
    serviceType = @"com.apple.share.SinaWeibo.post";//微博
    serviceType = @"com.apple.share.TencentWeibo.post"
    com.taobao.taobao4iphone.ShareExtension // 淘宝
    com.apple.share.Flickr.post", // Flickr
    com.laiwang.DingTalk.ShareExtension // 钉钉
    com.apple.mobileslideshow.StreamShareService // iCloud
    com.alipay.iphoneclient.ExtensionSchemeShare // 支付宝
    com.apple.share.Facebook.post // Facebook
    com.apple.share.Twitter.post // Twitter
    com.apple.Health.HealthShareExtension", // 应该是健康管理

自定义

https://github.com/CainRun/ActivityControllerDemo
http://www.jianshu.com/p/9de528d96466
http://blog.csdn.net/qq350116542/article/details/52058232

参考资料

http://www.jianshu.com/p/e4902ff334ef
http://blog.csdn.net/boyqicheng/article/details/77991765
http://mp.weixin.qq.com/s/8w7Mn9BVRnhdEKGQjhMzyg *

你可能感兴趣的:(ios原生分享功能)