一、自定义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
马克。。。有点搞混了!