iOS解耦控制器分享功能

现在几乎每个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. 分享页:
分享页实现思路,可以在此定义自己的分享页样式。

iOS解耦控制器分享功能_第1张图片
分享页提供的API

2. 快捷调用:
快速调起分享页面,使用分类让控制器新增分享功能,便于拆装。
iOS解耦控制器分享功能_第2张图片
分类提供的控制API

3. HPShareManage:
基本可以API介绍,注释非常详细,不复啰嗦。
iOS解耦控制器分享功能_第3张图片
初始化和分享API

iOS解耦控制器分享功能_第4张图片
便捷分享API
iOS解耦控制器分享功能_第5张图片
辅助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

你可能感兴趣的:(iOS解耦控制器分享功能)