现在几乎每个App都需要实现分享功能,而且该功能通常会散落在不同的控制器中,最平常的方法就是在每个携带该功能的控制器都new一个新的分享页实例,然后将其add到当前控制器的view或者是keyWindow上。
再加上该功能通常可以分享至多种不同的平台,不同平台的响应方式也不尽相同,综上可以想见,如果每个控制器都写一份分享代码,该是多么的“壮观”景象。
一、思考
重新整理分享的过程我们不难发现,其实只需要3步操作就可以完成完整的分享过程。
1. 调起分享页,选择分享平台。
2. 组装分享数据,启动分享操作。
3. 分享结束,并处理结果。
接下来就分解这三步,看看我们每一步需要做些什么?
1.分享页:
1.1. 不同的数据可分享到的平台可能有所区别,所以分享页需要有一个类型,控制展示可分享的平台信息。
1.2. 用户选择了分享平台应该只有分享页自己最清楚,所以应该有一个当前选中的分享平台信息。
2.控制器:
2.1. 只有控制器知道当前的数据能够分享到哪些平台,相应的控制器就需要“告诉”分享页,应该展示哪些可供选择的分享平台。
2.2. 控制器还需要组装需要分享的数据,用来做实际的分享。
3.分享并处理结果:
3.1. 控制器只需要准备数据和处理分享结果就足够了,因此很明显调起分享的过程的代码不应该出现在控制器中,那么出现在哪里呢?
3.2. ** HPShareManager**是我用来封装调起分享过程的类,它主要做的事情很简单,就是用来根据控制器传入的“待分享数据”和“分享目的地平台”调起响应的数据进行实际分享,并回调处理分享的结果即可。
3.3. 当然HPShareManager还可以提供一些更细节的操作,如压缩图片,注册SDK信息等。
二、实现(本文以ShareSDK分享为例)
1. 分享页:
分享页实现思路,可以在此定义自己的分享页样式。
2. 快捷调用:
快速调起分享页面,使用分类让控制器新增分享功能,便于拆装。
分类提供的控制API
3. HPShareManage:
基本可以API介绍,注释非常详细,不复啰嗦。
初始化和分享API 便捷分享API 辅助API
以上方法的实际实现跟正常分享没有太大的差别,有定制需求的在内部完成即可,在此不再赘述。
完成上面的几个步骤,分享功能分离框架基本完成,接下来就是如何使用了。
三、 基本使用
控制器中使用代码简介(已加注释)
// 给需要分享功能的控制器添加分类头文件
#import "UIViewController+HPShareManager.h"
/**************************** 调用代码 ****************************/
// 1. 使用分类方法调起分享页,当用户选择了目的地平台后回调completionBlock
[self share:HPShareUITypeNormal completion:^(SSDKPlatformType platformType {
// 2. 准备待分享的数据
NSURL *shareURL = @"待分享的链接地址;
NSString *content = @"待分享的文字";
NSString *title = @"待分享的标题";
UIImage *shareImage = @"待分享的图片";
// 3. 正式调起SDK分享功能
[HPShareManager shareParamsWithTitle:title text:content url:shareURL images:shareImage forPlatformSubType:platformType onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
// 4. 处理分享结果
if(state == SSDKResponseStateSuccess) {
// 成功处理回调
} else if (state == SSDKResponseStateFail) {
// 失败处理回调
}
}];
}];
简单的几个方法调用就实现了给控制器新增分享的功能,极大的减少了代码的耦合和重复,非常值得一试。
that's all,一个简单却实用的“解耦控制器分享功能”就实现了,希望大家喜欢。
转载请注明出处
http://www.jianshu.com/p/0e415b7dff55
网友评论