tzjut

导航

使用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

 

 

 

posted on 2013-07-18 18:10  tzjut  阅读(763)  评论(0)    收藏  举报