一、自定义UIActivity:
如果想要自定义UIActivity必须知道UIActivityViewController。首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的,
这一点可以从他的初始化方法中就可以看到。
UIActivityViewController *activityView = [[UIActivityViewController alloc]
initWithActivityItems:activityItems applicationActivities:activities];
其中activityItems中一个数组,用于存储需要传输的数据,例如需要分享的网址,图片,或者要进行操作的文档。
applicationActivities 也是一数组用于存在需要进行的操作,如果没有自定义的UIActivity,一般都是nil,展示出来的都是一些系统样式。当然系统也封装了一些分享的代码,例如
UIActivityCategoryAction(操作类,用于打印,投影等)
- UIActivityTypePrint
- UIActivityTypeCopyToPasteboard
- UIActivityTypeAssignToContact
- UIActivityTypeSaveToCameraRoll
- UIActivityTypeAddToReadingList
- UIActivityTypeAirDrop
UIActivityCategoryShare(分享类,用于分享,发送等)
- UIActivityTypeMessage
- UIActivityTypeMail
- UIActivityTypePostToFacebook
- UIActivityTypePostToTwitter
- UIActivityTypePostToFlickr
- UIActivityTypePostToVimeo
- UIActivityTypePostToTencentWeibo(腾讯微博)
- UIActivityTypePostToWeibo(系统自己封装了新浪微博)
系统会检测你所有用于应用的操作,显示在操作面板上面。当然你可以通过
activityViewC.excludedActivityTypes = @[];筛选出你不需要的类型。
当然根据操作的不同,携带的东西都也有略微的差别,具体自己查阅文档
前面大致简单介绍一下UIActivityViewController,现在开始自定义UIActivity
<UIActivityItemSource>
获取数据项
- activityViewControllerPlaceholderItem:
- activityViewController:itemForActivityType
提供数据项
- activityViewController:subjectForActivityType:
- activityViewController:dataTypeIdentifierForActivityType:
- activityViewController:thumbnailImageForActivityType:suggestedSize:
上述方法都是需要重写的:
#pragma mark 显示 + (UIActivityCategory)activityCategory { //返回值是告诉系统这个是action类型,还是share类型的,一般默认的是action类型的,所以我们在这里返回一个action类型 return UIActivityCategoryAction; } - (NSString *)activityType { //用来区分不用的activity的字符串,用于你的bundle id作为前缀 return [NSString stringWithFormat:@"%@.NCActivity",[NSBundle mainBundle].bundleIdentifier]; } - (NSString *)activityTitle { return @"返回的是选项图标下面的文字"; } - (UIImage *)activityImage { // 因为是ios8.0,所以是支持彩色团素材的,返回的是你所要点击的图标, return [UIImage imageNamed:@"wechat_session"]; } #pragma mark 操作 - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { for (id item in activityItems) { if ([item isKindOfClass:[UIImage class]]) { return YES; } if ([item isKindOfClass:[NSString class]]) { return YES; } if ([item isKindOfClass:[NSURL class]]) { return YES; } } return NO; //设置可以操作的数据, } - (void)prepareWithActivityItems:(NSArray *)activityItems { //准备分享所进行的方法,通常在这个方法里面,把item中的东西保存下来 for (id item in activityItems) { if ([item isKindOfClass:[UIImage class]]) { self.image = (UIImage *)item; } if ([item isKindOfClass:[NSString class]]) { self.text = (NSString *)item; } if ([item isKindOfClass:[NSURL class]]) { self.url = (NSURL *)item; } } } - (void)performActivity { //这里就可以关联外面的app进行分享操作了 //也可以进行一些数据的保存等操作 //操作的最后必须使用下面方法告诉系统分享结束了 [self activityDidFinish:YES]; }
二、简单跳转到微信分享
这里主要用到一个第三方的SDK:libWeiChatSDK.a
马克。。。有点搞混了!