场景:
我需要在我的应用内置一个分享的功能,方便用户分享给他们的好友,以便产品增长自然量。
问题
我设置完成之后分享的时候分享给微信,其中的图片始终出不来,我起初以为是图片比较大加载不出来的问题。后面看到别的应用能够分享图片,但是仅仅是分享图片,那我也想分享图片。后面单独设置图片后,出现了弹出不支持此类型的对话框
解决
设置分享的时候,加入item的时候有问题。
代码如下:
+ (void)customShareWithShareText:(NSString *)shareText shareImage:(UIImage *)shareImage shareUrl:(NSString *)shareUrlStr{
// 1、设置分享的内容,并将内容添加到数组中
NSMutableArray *tempArrayM = [NSMutableArray array];
if (shareText.length) {
[tempArrayM addObject:shareText];
}
NSData *imageData = nil;
if (shareImage) {
imageData = UIImagePNGRepresentation(shareImage);
[tempArrayM addObject:imageData];
}
NSURL *shareUrl = nil;
if (shareUrlStr.length) {
shareUrl = [NSURL URLWithString:shareUrlStr];
[tempArrayM addObject:shareUrl];
}
NSArray *items = tempArrayM.copy;
if (items.count == 0) {
return;
}
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
if (@available(iOS 11.0, *)) {//UIActivityTypeMarkupAsPDF是在iOS 11.0 之后才有的
activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks,UIActivityTypeMarkupAsPDF];
} else if (@available(iOS 9.0, *)) {//UIActivityTypeOpenInIBooks是在iOS 9.0 之后才有的
activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail,UIActivityTypeOpenInIBooks];
}else {
activityVC.excludedActivityTypes = @[UIActivityTypeMessage,UIActivityTypeMail];
}
activityVC.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
if (completed) {
NSLog(@"%@",@"分享成功");
}else {
NSLog(@"%@",@"分享失败");
}
};
//这儿一定要做iPhone与iPad的判断,因为这儿只有iPhone可以present,iPad需pop,所以这儿actVC.popoverPresentationController.sourceView = self.view;在iPad下必须有,不然iPad会crash,self.view你可以换成任何view,你可以理解为弹出的窗需要找个依托。
UIViewController *vc = [KODUtilService KOD_getTopViewController];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
activityVC.popoverPresentationController.sourceView = vc.view;
[vc presentViewController:activityVC animated:YES completion:nil];
} else {
[vc presentViewController:activityVC animated:YES completion:nil];
}
}
看代码发现,其实我刚开始设置的时候,直接传的是UIimage类型,而不是把图片转成二进制即NSData类型,转完之后就没问题了。
NSData *mageData = UIImagePNGRepresentation(shareImage);
PS: 顺便说一下在iPad上是需要pop出来的,多一行代码即:
activityVC.popoverPresentationController.sourceView = vc.view;
希望大家使用系统分享成功,以上~
网友评论