美文网首页
iOS UIActivityViewController 系统分

iOS UIActivityViewController 系统分

作者: iOS小武哥 | 来源:发表于2019-12-27 16:33 被阅读0次

简介:

UIActivityViewController是苹果自带分享,可以分享到FaceBook、微博、微信、QQ、信息、邮件、备忘录等平台,不需要对接第三方SDK,当然了也支持自定义分享,也可以自己看看API里面写的,实现起来也很简单.简单调起分享和简单,代码如下:
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
UIImage *imageV = [UIImage imageNamed:@"123"];
NSString *str = @"五哥最帅";
NSArray *items = [NSArray arrayWithObjects:url,imageV,str, nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
这样就可以调起系统的分享功能,自己可以写一个Demo,运行看一下,接下来就是一些参数的设置,我们一起来看一下:
1.modalInPresentation/modalInPopover
//这个属性是设置分享弹起,点击视图外,是否可以消失,YES不消失,只能点击视图上面的取消按钮才能消失!
if (@available(iOS 13.0, *)) {
            activityViewController.modalInPresentation = YES;
     } else {
            // Fallback on earlier versions
            activityViewController.modalInPopover = YES;
     }
2. excludedActivityTypes 去除特定的分享功能
//分享页面就看不见这3个平台
activityViewController.excludedActivityTypes = @[
    UIActivityTypePostToFacebook,
    UIActivityTypePostToTwitter,
    UIActivityTypePostToWeibo,
    ];
3.在IPad 必须通过popover弹出分享页面,在iPhone和iPodtouch上,必须以模态的方式展现,否则会报错!
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
        activityViewController.preferredContentSize = CGSizeMake(200.0f, 200.0f);
        activityViewController.modalPresentationStyle = UIModalPresentationPopover;
        UIPopoverPresentationController *popver = [activityViewController popoverPresentationController];
        popver.permittedArrowDirections = UIPopoverArrowDirectionUp; // 箭头位置
         popver.sourceRect = CGRectMake(30.0f, button.frame.origin.y, 300.0f, 300.0f); // 弹出视图显示位置
    activityViewController.popoverPresentationController.sourceView = button;
        [self presentViewController:activityViewController animated:YES completion:nil];
    }
  else
  {
    [self presentViewController:activityViewController animated:YES completion:nil];
  }
4.分享成功和失败回调,如果你的App最低支持iOS8以下的需要判断以下
//iOS8之后
        UIActivityViewControllerCompletionWithItemsHandler itemsBlock = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){
            
            NSLog(@"activityType == %@",activityType);
            if (completed == YES) {
                NSLog(@"completed");
            } else {
                NSLog(@"cancel");
            }
        };
activityViewController.completionWithItemsHandler = itemsBlock;
//iOS 8 之前
     UIActivityViewControllerCompletionHandler handlerBlock = ^(UIActivityType __nullable activityType, BOOL completed){
         NSLog(@"activityType == %@",activityType);
         if (completed == YES) {
             NSLog(@"completed");
         } else {
             NSLog(@"cancel");
         }
     };
activityVC.completionHandler = handlerBlock;
5.上面完成之后,就可以利用系统实现分享功能,接下来我们来自定义分享按钮,按钮是UIActivity类,那我们新创建一个类CustomActivity继承UIActivity如下:
//.h
#import <UIKit/UIKit.h>

@interface CustomActivity : UIActivity

#pragma mark -- 分享按钮title
@property (nonatomic, copy) NSString * title;
#pragma mark -- 分享按钮图片
@property (nonatomic, strong) UIImage * image;
#pragma mark -- URL
@property (nonatomic, strong) NSURL * url;
#pragma mark -- 平台类型
@property (nonatomic, copy) NSString * type;
#pragma mark -- 分享内容
@property (nonatomic, strong) NSArray * shareContexts;

- (instancetype)initWithTitie:(NSString *)title withActivityImage:(UIImage *)image withUrl:(NSURL *)url withType:(NSString *)type  withShareContext:(NSArray *)shareContexts;

@end
//.m实现
#import "CustomActivity.h"
@implementation CustomActivity
- (instancetype)initWithTitie:(NSString *)title withActivityImage:(UIImage *)image withUrl:(NSURL *)url withType:(NSString *)type withShareContext:(NSArray *)shareContexts{
    if(self == [super init]){
        _title = title;
        _image = image;
        _url = url;
        _type = type;
        _shareContexts = shareContexts;
    }
    return self;
}

#pragma mark -- 显示的位置设置 最上面是AirDrop,中间是Share,下面是Action
+ (UIActivityCategory)activityCategory{
    return UIActivityCategoryShare;
}

- (NSString *)activityType{
    return _type;
}

- (NSString *)activityTitle {
    return _title;
}

- (UIImage *)_activityImage {
    //UIActivityCategoryAction时,系统默认会渲染图片,所以不能重写为 - (UIImage *)activityImage {return _image;}
    return _image;
}

- (NSURL *)activityUrl{
    return _url;
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
    if (activityItems.count > 0) {
        return YES;
    }
    return NO;
}
#pragma mark -- 判断自定义的点击是哪个
- (void)prepareWithActivityItems:(NSArray *)activityItems {
    if ([_type isEqualToString:@"customActivity"]) {
        NSLog(@"customActivity");
    }
    else
    {
        NSLog(@"123213213213");
    }
}

#pragma mark -- 告诉系统分享结束了
- (void)performActivity {
    [self activityDidFinish:YES];

}
@end
6.怎么用呢,还记得之前创建分享时有个参数传的是 'nil'吗?
//声明一个自定义Activity
CustomActivity * customActivit = [[CustomActivity alloc] initWithTitie:@"大朗" withActivityImage:imageV withUrl:url withType:@"customActivity" withShareContext:items];

//之前传nil,把nil替换成customActivit
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:@[activities]];

applicationActivities:这个参数是个数组,所以我们可以自定义多个,看你的需求来做就好了,上面就是我了解到UIActivityViewController分享,有错误的地方请您指正,非常感谢!

相关文章

网友评论

      本文标题:iOS UIActivityViewController 系统分

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