自定義UIActivity實(shí)現(xiàn)系統(tǒng)自帶UIActivityViewController分享功能

有時(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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";

demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末馆衔,一起剝皮案震驚了整個(gè)濱河市瘟判,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌角溃,老刑警劉巖拷获,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異减细,居然都是意外死亡匆瓜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陕壹,“玉大人,你說我怎么就攤上這事树埠】饭荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵怎憋,是天一觀的道長(zhǎng)又碌。 經(jīng)常有香客問我,道長(zhǎng)绊袋,這世上最難降的妖魔是什么毕匀? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮癌别,結(jié)果婚禮上皂岔,老公的妹妹穿的比我還像新娘。我一直安慰自己展姐,他們只是感情好躁垛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著圾笨,像睡著了一般教馆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擂达,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天土铺,我揣著相機(jī)與錄音,去河邊找鬼板鬓。 笑死悲敷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穗熬。 我是一名探鬼主播镀迂,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼唤蔗!你這毒婦竟也來了探遵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妓柜,失蹤者是張志新(化名)和其女友劉穎箱季,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍掐,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡藏雏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了作煌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掘殴。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赚瘦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出奏寨,到底是詐尸還是另有隱情起意,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布病瞳,位于F島的核電站揽咕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏套菜。R本人自食惡果不足惜亲善,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逗柴。 院中可真熱鬧蛹头,春花似錦、人聲如沸嚎于。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)于购。三九已至袍睡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肋僧,已是汗流浹背斑胜。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嫌吠,地道東北人止潘。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辫诅,于是被迫代替她去往敵國(guó)和親凭戴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容