使用subclass UIActivity的方案来分享图片
IOS6开始, 系统提供了UIActivityViewController, 对图片,文字,url进行相关的操作. 对于缺乏UI设计师的开发来说, 使用它进行轻量级的分享是很好的选择.
最大的缺点是自定义的分享服务,图标都是灰色的.
使用微信进行分享的例子:
1 定义WeiXinActivity类.
@interface WeiXinActivity:UIActivity { UIImage* _imageForShare; NSString* _messageForShare; } @end const NSString* WeiXinActivityType = @"WeiXinActivity"; @implementation WeiXinActivity - (NSString *)activityType { return [NSString stringWithString:WeiXinActivityType]; } - (NSString *)activityTitle { return @"微信"; } - (UIImage *)activityImage { return [UIImage imageNamed:@"SA_Weixin.png"]; } - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems { BOOL bins = [WXApi isWXAppInstalled]&& [WXApi isWXAppSupportApi]; if (!bins) { return NO; } for (id item in activityItems) { if ([item isKindOfClass:[UIImage class]]) { return YES; } } return NO; } - (void)prepareWithActivityItems:(NSArray *)activityItems { for (id item in activityItems) { if ([item isKindOfClass:[UIImage class]]) { _imageForShare =item; } else if([item isKindOfClass:[NSString class]]) { _messageForShare =item; } } } - (UIViewController *)activityViewController { return nil; } - (void)performActivity { WXMediaMessage *message = [WXMediaMessage message]; UIImage* thumb = [ImageHelper image:_imageForShare fitInSize:CGSizeMake(100, 100)]; [message setThumbImage:thumb]; WXImageObject *ext = [WXImageObject object]; ext.imageData = UIImageJPEGRepresentation(_imageForShare, 0.9); message.mediaObject = ext; SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init]; req.bText = NO; req.message = message; BOOL b= [WXApi sendReq:req]; [self activityDidFinish:b]; } @end
2 使用WeixinActivity进行分享:
@implementation ShareWarper
+(NSArray*)additionShartTargets
{
WeiXinActivity* weiXin = [[WeiXinActivity alloc] init];
//TencentOpenActivity* tencent = [[TencentOpenActivity alloc] init];
return @[weiXin];
}
+(void)share:(NSArray*)items from:(UIViewController<ShareWarperDelegate>*)vc
{
UIActivityViewController *activityVC =
[[UIActivityViewController alloc] initWithActivityItems:items
applicationActivities:[ShareWarper additionShartTargets]];
activityVC.excludedActivityTypes = @[UIActivityTypeAssignToContact,UIActivityTypeMessage,UIActivityTypePrint,UIActivityTypeCopyToPasteboard];
__weak UIViewController<ShareWarperDelegate>* weakRef = vc;
activityVC.completionHandler = ^(NSString *activityType, BOOL completed){
[weakRef shareTo:activityType completed:completed];
};
[vc presentViewController:activityVC animated:YES completion:nil];
}
@end
浙公网安备 33010602011771号