文档章节

友盟自定义页面分享功能实现

XJDomain
 XJDomain
发布于 2016/03/29 21:09
字数 1210
阅读 1065
收藏 2

贡献作者 -【XJDomain】
博客XJ:  https://my.oschina.net/shengbingli/blog
GitHub直播地址https://github.com/lishengbing/XJDomainLive

 

 

 

 

 

1:学习链接:

 

http://dev.umeng.com/social/ios/detail-share

http://www.devstore.cn/evaluation/testInfo/116-159.html

YLShareView.h

//
//  YLShareView.h
//  YangLand
//
//  Created by 李胜兵 on 14/3/25.
//  Copyright © 2014年 tshiny. All rights reserved.
//

#import "BaseView.h"
#import "YLShareContentSourceView.h"

@interface YLShareView : BaseView
@property (strong, nonatomic)YLShareContentSourceView *bottomView;

/**
 *  显示
 */
- (void)show;


/**
 *  消失
 */
- (void)dismiss;

@end

 

//
//  YLShareView.m
//  YangLand
//
//  Created by 李胜兵 on 14/3/25.
//  Copyright © 2014年 tshiny. All rights reserved.
//

#import "YLShareView.h"


static CGFloat bottomViewHeight = 200;  // bottomView高度

@interface YLShareView ()<YLShareContentSourceViewDelegate>


@end


@implementation YLShareView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {

        self.backgroundColor = [UIColor colorWithWhite:.3 alpha:.3];
         [self addSubview:self.bottomView];
    }
    return self;
}

- (void)setUpUI {
    [self addSubview:self.bottomView];

}

- (void)show {
    UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
    // 模版的大小等于窗口的大小
    self.frame = window.bounds;
    [window addSubview:self];

    [YLAnimaitonTool showAnimationFlashWithView:self.bottomView duration:.5];
     self.bottomView.alpha = 1;

}

- (void)dismiss {
    
    [UIView animateWithDuration:.7 animations:^{
        self.bottomView.alpha = 0;
    } completion:^(BOOL finished) {
        
       [self removeFromSuperview];
        
    }];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self dismiss];
}




#pragma mark - YLShareContentSourceViewDelegate代理 、

- (void)tapCancelButtom {
    [self dismiss];
}



#pragma mark - get

- (YLShareContentSourceView *)bottomView {
    if (!_bottomView) {
        NSArray *array = @[@"新浪",@"微信",@"朋友圈",@"QQ"]; //分享来源个数
        bottomViewHeight = bottomViewHeight<200?200:bottomViewHeight;// 限制他人设置低于200的高度
       _bottomView = [[YLShareContentSourceView alloc]initWithFrame:CGRectMake(0, YLScreenH-bottomViewHeight, YLScreenW, bottomViewHeight) withShareSourceArray:array];
        _bottomView.delegate  = self;
    }
    return _bottomView;
}







@end

 

//
//  YLShareContentSourceView.h
//  YangLand
//
//  Created by 李胜兵 on 14/3/28.
//  Copyright © 2014年 tshiny. All rights reserved.
//

#import "BaseView.h"


@class YLShareContentSourceView;

@protocol YLShareContentSourceViewDelegate <NSObject>

/**
 *  点击取消按钮,触发事件
 */
- (void)tapCancelButtom;


- (void)shareWithSNSType:(NSString *)type;

@end




@interface YLShareContentSourceView : BaseView

@property (weak, nonatomic)id<YLShareContentSourceViewDelegate>delegate;

- (instancetype)initWithFrame:(CGRect)frame withShareSourceArray:(NSArray *)array;

@end

 

//
//  YLShareContentSourceView.m
//  YangLand
//
//  Created by 李胜兵 on 14/3/28.
//  Copyright © 2014年 tshiny. All rights reserved.
//

#import "YLShareContentSourceView.h"
#import "shareTool.h"


static CGFloat normalHeight = 50;          //  默认上下高度
static CGFloat verticalSpace = 10;        //  上下间距
static CGFloat imageHeight = 50;         //  图片高度=宽度
static NSInteger showCount = 4;         //  一行显示分享来源个数


@interface YLShareContentSourceView ()
@property (strong, nonatomic)UILabel *shareWhereLabel; // 分享去哪儿

@property (strong, nonatomic)UIButton *cancelBtn; // 取消按钮

@property (strong, nonatomic)UIScrollView *scrollView;

@end

@implementation YLShareContentSourceView


- (instancetype)initWithFrame:(CGRect)frame withShareSourceArray:(NSArray *)array {
    self = [super initWithFrame:frame];
    if (self) {
        self.backgroundColor = [UIColor whiteColor];
        
        [self addSubview:self.shareWhereLabel];
        [self addSubview:self.cancelBtn];
        [self addSubview:self.scrollView];
        
        UIScrollView *scrollView= [[UIScrollView alloc]initWithFrame:CGRectMake(0, normalHeight+verticalSpace, YLScreenW, self.height-normalHeight*2-verticalSpace*2)];
        
        NSInteger newCount = 0;
        if (array.count%showCount!=0) {
            newCount = 1;
        }
        scrollView.contentSize = CGSizeMake(YLScreenW*(array.count/showCount+newCount), self.height-normalHeight*2-verticalSpace*2);
        [self addSubview:scrollView];
        
        
        for (int i=0; i<array.count; i++) {
            
            
            CGFloat lineSpace = (YLScreenW-showCount*imageHeight) / (showCount+1);
            double imageX = lineSpace + i*(imageHeight+lineSpace);
            double imageY = 0;
            UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(imageX, imageY, imageHeight, imageHeight)];
            imageView.userInteractionEnabled = YES;
            imageView.tag = 100 + i;
            [scrollView addSubview:imageView];
            [imageView addTapActionWithBlock:^(UIGestureRecognizer *gestureRecoginzer) {
                [self tap:gestureRecoginzer];
            }];

            
            UILabel *label = [[UILabel alloc]init];
            label.text = array[i];
            label.textColor = [UIColor YLColorHomePrice];
            label.font = [UIFont systemFontOfSize:13];
            label.backgroundColor = [UIColor whiteColor];
            [label sizeToFit]; // 在计算之前加,不然无法计算
            label.tag = 100 +i;
            label.centerX = imageView.centerX;
            label.y = CGRectGetMaxY(imageView.frame) + verticalSpace;
            [label addTapActionWithBlock:^(UIGestureRecognizer *gestureRecoginzer) {
                [self tap:gestureRecoginzer];
            }];
            
            
            switch (i) {
                case 0:
                    imageView.image = [UIImage imageNamed:@"share_weibo"];
                    break;
                case 1:
                    imageView.image = [UIImage imageNamed:@"share_weixin"];
                    break;
                case 2:
                    imageView.image = [UIImage imageNamed:@"share_icon_pengyouquan"];
                    break;
                case 3:
                    imageView.image = [UIImage imageNamed:@"share_icon_qq"];
                    break;
                    
                default:
                    break;
            }
            
            [scrollView addSubview:label];
            
        }
        
    }
    return self;
}


#pragma mark - 取消分享

- (void)cancel:(UIButton *)sender {
    
    if ([self.delegate respondsToSelector:@selector(tapCancelButtom)]) {
        [_delegate tapCancelButtom];
    }
}


#pragma mark - 分享类型

- (void)tap:(UIGestureRecognizer *)ges {
    switch (ges.view.tag-100) {
        case 0:
            YLLog(@"微博");
            [self.delegate shareWithSNSType:UMShareToSina];
            break;
        case 1:
            YLLog(@"微信");
             [self.delegate shareWithSNSType:UMShareToWechatSession];
            break;
        case 2:
            YLLog(@"朋友圈");
             [self.delegate shareWithSNSType:UMShareToWechatTimeline];
            break;
        case 3:
            YLLog(@"QQ");
             [self.delegate shareWithSNSType:UMShareToQQ];
            break;
            
        default:
            break;
    }
}




#pragma mark - get

- (UILabel *)shareWhereLabel {
    if (!_shareWhereLabel) {
        _shareWhereLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, YLScreenW, normalHeight)];
        _shareWhereLabel.text = @"分享到";
        _shareWhereLabel.textColor = [UIColor iconColor];
        _shareWhereLabel.font = [UIFont systemFontOfSize:13];
        _shareWhereLabel.textAlignment = NSTextAlignmentCenter;
        _shareWhereLabel.backgroundColor = [UIColor YLColorhelpful];
    }
    return _shareWhereLabel;
}


#pragma mark - get

- (UIButton *)cancelBtn {
    if (!_cancelBtn) {
        _cancelBtn = [[UIButton alloc]initWithFrame:CGRectMake(0, self.height-50, YLScreenW, normalHeight)];
        [_cancelBtn setTitle:@"取消" forState:UIControlStateNormal];
        [_cancelBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [_cancelBtn setBackgroundColor:[UIColor YLColorBeauty]];
        _cancelBtn.titleLabel.font = [UIFont systemFontOfSize:13];
        [_cancelBtn addTarget:self action:@selector(cancel:) forControlEvents:UIControlEventTouchUpInside];
        
    }
    return _cancelBtn;
}




                            
@end

 

      

         

    使用范例:

  1. 在使用控制器中定义属性:

    @property (strong, nonatomic)YLShareView *shareView;

  2. 初始化:


    #pragma mark - get

    - (YLShareView *)shareView {
        if (!_shareView) {
            _shareView = [YLShareView newAutoLayoutView];
            _shareView.bottomView.delegate = self;
        }
        return _shareView;
    }
     

  3. 在点击按钮中实现调用这个方法:

    - (void)textShareCustomView {
        // 显示
        [self.shareView show];
    }

  4. 实现YLShareContentSourceViewDelegate这个页面的两个代理方法

    1.#pragma mark - 两个代理.....

    - (void)tapCancelButtom {
        [self.shareView dismiss];
    }

    2.- (void)shareWithSNSType:(NSString *)type {
        //即将跳转就让他消失页面
        [self tapCancelButtom];

     [self shareWithPostSNSWithTypes:type content:@"分享内容" image:gifData location:nil urlResource:nil presentedController:self completion:^(UMSocialResponseEntity *response) {
            if (response.responseCode == UMSResponseCodeSuccess) {
                YLLog(@"分享成功");
            }
        }];

}

 

上面一个方法的解释:

这个方法可以写在基类控制器中如:BaseViewController,每个控制器继承自这个控制器的时候,可以直接调用即可

/**
 *  分享
 *
 *  @param shareType  分享类型
 *  @param Content    分享内容
 *  @param image      分享图片
 *  @param location   分享位置
 *  @param urlResouce 分享资源路径
 *  @param vc         当前分享的控制器管理
 *  @param Completion 完成后的回调
 */
- (void)shareWithPostSNSWithTypes:(NSString *)shareType content:(NSString *)Content image:(id)image location:(CLLocation *)location urlResource:(UMSocialUrlResource *)urlResouce presentedController:(UIViewController *)vc completion:(void(^)(UMSocialResponseEntity *response))Completion;

 

 

 

 

/**
 *  分享方法
 */
- (void)shareWithPostSNSWithTypes:(NSString *)shareType content:(NSString *)Content image:(id)image location:(CLLocation *)location urlResource:(UMSocialUrlResource *)urlResouce presentedController:(UIViewController *)vc completion:(void (^)(UMSocialResponseEntity *))Completion {
    if ([shareType isEqualToString:UMShareToSina]) {                  // 新浪
        
    }else if ([shareType isEqualToString:UMShareToWechatSession]) {   // 微信好友
        
    }else if ([shareType isEqualToString:UMShareToWechatTimeline]) {  // 微信朋友圈
        
    }else if ([shareType isEqualToString:UMShareToQQ]) {              // QQ
        
    }
    
    
    [[UMSocialDataService defaultDataService]  postSNSWithTypes:@[shareType] content:Content image:image location:location urlResource:urlResouce presentedController:vc completion:^(UMSocialResponseEntity *response){
        if (Completion) {
            Completion (response);
        }
    }];
    
    
}

 

YLShareView.m文件中使用一个动画是我的flash动画博客中那个方法,直接调用即可,可以写在一个工具类中即可!

 

 

后期如果有什么问题可以在评论下留下你的联系方便为你解答,谢谢!

 

 

 

 

 

 

 

 

 

        

                                                                         

 

 

 

    

 

 

 

                    

© 著作权归作者所有

XJDomain
粉丝 15
博文 112
码字总数 44060
作品 0
嘉定
高级程序员
私信 提问
自定义友盟分享界面iOS

提要: 使用代码实现友盟分享弹出的选择界面的自定义方法,不同的按钮实现相应的第三方分享。 1、项目需求 1.1.1:下面是我们项目的需求图:(如果用原生的是一行四个按钮) 1.1.2:友盟注册...

chen_gp_x
2016/10/09
0
0
Java转iOS-第一个项目总结(1)

0.前言 本人14年12月份,从网站开发组转到了移动开发组,自己的java两年半工作经验变成了objective-c零经验。2015年1月份新启动了一个移动项目,年后因为人事变动,自己从辅助开发变成了"核心...

蛙牛
2015/03/31
12.6K
67
iOS 用Runtime实现友盟页面数据统计功能

//联系人:石虎 QQ:1224614774 昵称:嗡嘛呢叭咪 一、概念 1.实现页面的统计,需要在每一个类中实现这个方法: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [Mob...

石虎132
2018/01/10
0
0
移动开发必知必会的六大数据统计平台(入门篇)

数据统计对于各位移动开发的童鞋并不陌生,小到Bug统计,大到数据分析,一款性能稳定、用户体验良好的APP一定离不开数据统计的支持,为此我将给大家科普一下常用的六大数据统计平台。 先说说...

mynameishuangshuai
2017/05/19
0
0
【友盟推送】java使用友盟API推送消息

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kisscatforever/article/details/89104132 一、前言 推送是一个很友好的功能,各种app基本都有主动推送消息的...

AresCarry
04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
4
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
5
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部