简单跳转到微信分享,基于libWeiChatSDK 和简单的自定义UIActivityViewController

时间:2022-08-30 09:11:32

   一、自定义UIActivity:

      如果想要自定义UIActivity必须知道UIActivityViewController。首先这个类主要是用于接受字符串,RUL类型和图片类型的数据用于分享和操作的,

这一点可以从他的初始化方法中就可以看到。

UIActivityViewController *activityView = [[UIActivityViewController alloc] 
initWithActivityItems:activityItems applicationActivities:activities];

其中activityItems中一个数组,用于存储需要传输的数据,例如需要分享的网址,图片,或者要进行操作的文档。

applicationActivities 也是一数组用于存在需要进行的操作,如果没有自定义的UIActivity,一般都是nil,展示出来的都是一些系统样式。当然系统也封装了一些分享的代码,例如

UIActivityCategoryAction(操作类,用于打印,投影等)

  1. UIActivityTypePrint
  2. UIActivityTypeCopyToPasteboard
  3. UIActivityTypeAssignToContact
  4. UIActivityTypeSaveToCameraRoll
  5. UIActivityTypeAddToReadingList
  6. UIActivityTypeAirDrop

UIActivityCategoryShare(分享类,用于分享,发送等)

  1. UIActivityTypeMessage
  2. UIActivityTypeMail
  3. UIActivityTypePostToFacebook
  4. UIActivityTypePostToTwitter
  5. UIActivityTypePostToFlickr
  6. UIActivityTypePostToVimeo
  7. UIActivityTypePostToTencentWeibo(腾讯微博)
  8. UIActivityTypePostToWeibo(系统自己封装了新浪微博)

系统会检测你所有用于应用的操作,显示在操作面板上面。当然你可以通过

    activityViewC.excludedActivityTypes = @[];筛选出你不需要的类型。

当然根据操作的不同,携带的东西都也有略微的差别,具体自己查阅文档

     前面大致简单介绍一下UIActivityViewController,现在开始自定义UIActivity

<UIActivityItemSource>
获取数据项

  1.  activityViewControllerPlaceholderItem:
  2.  activityViewController:itemForActivityType

提供数据项

  1. activityViewController:subjectForActivityType:
  2. activityViewController:dataTypeIdentifierForActivityType:
  3. 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

马克。。。有点搞混了!