有時(shí)我們需要調(diào)用系統(tǒng)自帶分享无午,可以使用UIActivityViewController:
簡(jiǎn)單用法代碼如下:
NSMutableArray *items = [[NSMutableArray alloc] init];
[items addObject:@"分享的title"];
[items addObject:[UIImage imageNamed:@"1"]];
[items addObject:@"https://www.baidu.com"];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
//NSMutableArray *excludedActivityTypes = [NSMutableArray arrayWithArray:@[UIActivityTypeAirDrop, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypePrint, UIActivityTypeMail, UIActivityTypePostToTencentWeibo, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToTwitter]];
//activityViewController.excludedActivityTypes = excludedActivityTypes;
[self presentViewController:activityViewController animated:YES completion:nil];
activityViewController.completionWithItemsHandler = ^(UIActivityType __nullable activityType, BOOL completed, NSArray * __nullable returnedItems, NSError * __nullable activityError){
NSLog(@"%@ ---- %@", activityType, returnedItems);
};
效果圖:
將上面代碼兩行注釋打開效果圖:
現(xiàn)在我們要自定義第二行(More行)的顯示耿焊,必須重寫UIActivity,效果圖:
UIActivityViewController
NS_CLASS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED @interface UIActivityViewController : UIViewController
可以看出UIActivityViewController是在iOS 6開始支持,且繼UIViewController
初始化方法
- (instancetype)initWithActivityItems:(NSArray *)activityItems applicationActivities:(nullable NSArray<__kindof UIActivity *> *)applicationActivities
參數(shù):
activityItems
:數(shù)組內(nèi)的對(duì)象代表的是我們想要操作的數(shù)據(jù)的一些屬性植影,而且這個(gè)數(shù)組至少需要一個(gè)值误算,比如我們PDF文檔的名稱,URL荧嵌;
applicationActivities
:數(shù)組指定了泛型小作,數(shù)組內(nèi)的對(duì)象必須是UIActivity
類型的對(duì)象,代表的是iOS系統(tǒng)支持的我們自定義的服務(wù)(后邊有講解)
UIActivityViewController
中如果不想顯示某些系統(tǒng)自帶分享功能苛骨,可以使用下面這個(gè)屬性進(jìn)行設(shè)置篱瞎,數(shù)組中的UIActivityType
對(duì)象就是不顯示的item功能
@property(nullable, nonatomic, copy) NSArray<UIActivityType> *excludedActivityTypes;
UIActivityType
類型有如下:
UIKIT_EXTERN UIActivityType const UIActivityTypePostToFacebook NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePostToTwitter NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePostToWeibo NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeMessage NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeMail NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePrint NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeCopyToPasteboard NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeAssignToContact NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeSaveToCameraRoll NS_AVAILABLE_IOS(6_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeAddToReadingList NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePostToFlickr NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePostToVimeo NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypePostToTencentWeibo NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeAirDrop NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
UIKIT_EXTERN UIActivityType const UIActivityTypeOpenInIBooks
如果我們不想展示AirDrop功能苟呐,我們把UIActivityTypeAirDrop
添加到excludedActivityTypes
里面:
activityViewController.excludedActivityTypes = @[UIActivityTypeAirDrop];
自定義UIActivity對(duì)象
UIActivity類中的方法說明:
//分享類型,我們自定義UIActivity有多種類型俐筋,如分享微信牵素、朋友圈、微博澄者、QQ等笆呆,所以要指定類型,方便我們?cè)趐erformActivity事件中判斷用戶行為
- (nullable UIActivityType)activityType;
//顯示的title
- (nullable NSString *)activityTitle;
//顯示的圖標(biāo)
- (nullable UIImage *)activityImage;
//用戶的行為事件捕獲闷哆,可以根據(jù)activityTitle判斷用戶行為
- (void)performActivity;
//在用戶選擇展示在UIActivityViewController中的自定義服務(wù)的圖標(biāo)之后腰奋,調(diào)用自定義服務(wù)處理方法之前的準(zhǔn)備工作,都需要在這個(gè)方法中指定抱怔,比如可以根據(jù)數(shù)據(jù)展示一個(gè)界面來獲取用戶指定的額外數(shù)據(jù)信息
- (void)prepareWithActivityItems:(NSArray *)activityItems;
//指定可以處理的數(shù)據(jù)類型劣坊,如果可以處理則返回YES
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems;
//UIActivityViewController中的服務(wù)分為了倆種,UIActivityCategoryAction和UIActivityCategoryShare,UIActivityCategoryAction表示在最下面一欄的操作型服務(wù),比如Copy屈留、Print;UIActivityCategoryShare表示在中間一欄的分享型服務(wù)局冰,比如一些社交軟件
+ (UIActivityCategory)activityCategory NS_AVAILABLE_IOS(7_0);
代碼實(shí)現(xiàn):
自定義UIActivity對(duì)象代碼:
NSString * const ActivityServiceWeixin = @"weixin";
NSString * const ActivityServiceWeixinFriends = @"weixin_friends";
@interface HBShareBaseActivity : UIActivity
@property (nonatomic) NSString *title;
@property (nonatomic) NSString *type;
@property (nonatomic) NSString *urlString;
@property (nonatomic) NSString *shareDescription;
@property (nonatomic) NSString *shareTitle;
@property (nonatomic) UIImage *image;
- (instancetype)initWithTitle:(NSString *)title type:(NSString *)type;
@end
@implementation HBShareBaseActivity
- (instancetype)initWithTitle:(NSString *)title type:(NSString *)type{
if (self = [super init]) {
self.title = title;
self.type = type;
}
return self;
}
- (NSString *)activityTitle{
return self.title;
}
- (NSString *)activityType{
return self.type;
}
- (UIImage *)activityImage{
NSString *weixinImageString = @"ic_share_wechat";
NSString *friendsImageString = @"ic_share_circle";
NSString *imageName = [self.type isEqualToString:ActivityServiceWeixin] ? weixinImageString: friendsImageString;
NSData *imageData = [NSData dataWithBase64EncodedString:imageName];
return [UIImage imageWithData:imageData scale:2.0];
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems{
return YES;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems
{
}
- (void)performActivity{
if ([self.type isEqualToString:ActivityServiceWeixin]) {
NSLog(@"在這里可以實(shí)現(xiàn)微信分享代碼");
}else{
NSLog(@"在這里可以實(shí)現(xiàn)朋友圈分享代碼");
}
}
@end
創(chuàng)建ShareTool類,繼承自NSObject灌危,使用自定義的HBShareBaseActivity類康二,代碼實(shí)現(xiàn)如下:
@interface ShareTool : NSObject
- (void)shareWithTitle:(NSString *)title description:(NSString *)description url:(NSString *)url image:(UIImage *)image completionHandler:(UIActivityViewControllerCompletionHandler)completionHandler;
@end
@interface ShareTool()
@property (nonatomic, copy) UIActivityViewControllerCompletionHandler completionHandler;
@end
@implementation ShareTool
- (void)shareWithTitle:(NSString *)title description:(NSString *)description url:(NSString *)url image:(UIImage *)image completionHandler:(UIActivityViewControllerCompletionHandler)completionHandler
{
NSMutableArray *items = [[NSMutableArray alloc] init];
[items addObject:title?:@""];
if (image) {
[items addObject:image];
}
if (url) {
[items addObject:url];
}
NSMutableArray *activities = [[NSMutableArray alloc] init];
HBShareBaseActivity *weixinActivity = [[HBShareBaseActivity alloc] initWithTitle:@"微信" type:ActivityServiceWeixin];
HBShareBaseActivity *weixinFriendsActivity = [[HBShareBaseActivity alloc] initWithTitle:@"朋友圈" type:ActivityServiceWeixinFriends];
[@[weixinActivity, weixinFriendsActivity] enumerateObjectsUsingBlock:^(HBShareBaseActivity *activity, NSUInteger idx, BOOL *stop) {
activity.urlString = url;
activity.shareDescription = description;
activity.shareTitle = title;
activity.image = image;
}];
[activities addObjectsFromArray:@[weixinActivity, weixinFriendsActivity]];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:activities];
NSMutableArray *excludedActivityTypes = [NSMutableArray arrayWithArray:@[UIActivityTypeAirDrop, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypePrint, UIActivityTypeMail, UIActivityTypePostToTencentWeibo, UIActivityTypeSaveToCameraRoll, UIActivityTypeMessage, UIActivityTypePostToTwitter]];
activityViewController.excludedActivityTypes = excludedActivityTypes;
AppDelegate *tempAppDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[tempAppDelegate.window.rootViewController presentViewController:activityViewController animated:YES completion:nil];
activityViewController.completionHandler = ^(NSString *activityType, BOOL complted){
if (completionHandler) {
completionHandler(activityType, complted);
self.completionHandler = nil;
}
};
}
在ViewController中調(diào)用代碼如下:
[[[ShareTool alloc] init] shareWithTitle:@"分享的title" description:@"描述信息" url:@"http://www.baidu.com" image:[UIImage imageNamed:@"1"] completionHandler:^(UIActivityType _Nullable activityType, BOOL completed) {
NSLog(@"%@ %d", activityType, completed);
}];
補(bǔ)充:
在UIActivityViewController中給用戶展示的服務(wù)的圖標(biāo)activityImage
。關(guān)于這里的圖標(biāo)勇蝙,有非常嚴(yán)格的限制:
- 首先是圖標(biāo)的背景色沫勿,這里推薦最好的完全透明的背景色;
官方文檔中是這么解釋的:"The alpha channel of the image is used as a mask to generate the final image that is presented to the user. Any color data in the image itself is ignored. Opaque pixels have a gradient applied to them and this gradient is then laid on top of a standard background. Thus, a completely opaque image would yield a gradient filled rectangle",
意思大概是,在這里顏色數(shù)據(jù)會(huì)被忽略味混,而透明圖層會(huì)被當(dāng)做mask(蒙版圖層)产雹,不透明的圖片會(huì)顯示成漸進(jìn)色填充。 -
其次是圖標(biāo)的尺寸翁锡,在不同的設(shè)備需要不同的尺寸蔓挖,因此需要準(zhǔn)備一套圖標(biāo)。
因此上面代碼中圖片地址:
NSString *weixinImageString = @"ic_share_wechat";
NSString *friendsImageString = @"ic_share_circle";
可以改成下面圖片地址(有點(diǎn)長(zhǎng)):
NSString *weixinImageString = @"iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4M0FENzkyMUYwNUJFMzExQjM1RkRBMzFGNDZFOTMyQSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowQjc4MzgxMjVFNDExMUUzQjMzMEFCMTkxMDhGOTAyRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowQjc4MzgxMTVFNDExMUUzQjMzMEFCMTkxMDhGOTAyRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUwNTg3QTZFMDU1Q0UzMTFCMzVGREEzMUY0NkU5MzJBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjgzQUQ3OTIxRjA1QkUzMTFCMzVGREEzMUY0NkU5MzJBIi8+IDwvcmRmOkRlc2NyaXB0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";
NSString *friendsImageString = @"iVBORw0KGgoAAAANSUhEUgAAAHgAAAB4CAYAAAA5ZDbSAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo4M0FENzkyMUYwNUJFMzExQjM1RkRBMzFGNDZFOTMyQSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDowQjc4MzgxNjVFNDExMUUzQjMzMEFCMTkxMDhGOTAyRiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowQjc4MzgxNTVFNDExMUUzQjMzMEFCMTkxMDhGOTAyRiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkUwNTg3QTZFMDU1Q0UzMTFCMzVGREEzMUY0NkU5MzJBIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjgzQUQ3OTIxRjA1QkUzMTFCMzVGREEzMUY0NkU5MzJBIi8+IDwvcmRmOkRlc2NyaXB0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";