EG:基本的分享:微信、微博、QQ、QQZone、新浪微博
一、创建背景的模糊视图,以及一个页面的6个按钮
1、分享的视图.h文件
@interface CoverView : UIView
///实例化一个本类的对象 并且返回去
+(instancetype)coverView;
@end
2、分享的视图.m文件
#import "CoverView.h"
//导入友盟
#import "UMSocial.h"
@interface CoverView ()
//中间部分的容器视图
@property (nonatomic,strong)UIView *containerView;
//按钮要显示的真实位置的数组
@property (nonatomic,strong)NSMutableArray *btnYArray;
//按钮还没执行动画之前位置的数组
@property (nonatomic,strong)NSMutableArray *hiddenBtnYArray;
@end
@implementation CoverView
//懒加载中间部分的容器
-(UIView *)containerView{
if (!_containerView) {
_containerView=[[UIView alloc]init];
// _containerView.transform = CGAffineTransformMakeRotation(M_PI_4);
_containerView.backgroundColor=[[UIColor whiteColor]colorWithAlphaComponent:0.7];
}
return _containerView;
}
//实例化本类对象方法的实现
+(instancetype)coverView{
CoverView * cover=[[CoverView alloc]init];
cover.backgroundColor=[[UIColor blackColor]colorWithAlphaComponent:0.5];
return cover;
}
//本类对象收拾的点击方法 执行动画之后 在移除视图
-(void)clickCover{
//开启线程执行动画 0.02为时间差-->既是两个按钮之间掉落的时间差
UIButton *btn=self.containerView.subviews[self.containerView.subviews.count-1];//通过中间部分的容器取到按钮
CGFloat showY=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-1] floatValue];//取到视图没显示之前的y轴坐标
dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
dispatch_after(time, dispatch_get_main_queue(), ^{
//执行动画 并且显示到最终的位置 及是移动到没执行动画之前的y值--》最初是的y值
[UIView animateWithDuration:1.0 animations:^{
btn.frame=CGRectMake(btn.frame.origin.x, showY, btn.frame.size.width, btn.frame.size.height);
}];
//时间间隔之后再开启另外一个动画
UIButton *btn1=self.containerView.subviews[self.containerView.subviews.count-2];
CGFloat showY1=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-2] floatValue];
dispatch_time_t time1 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
dispatch_after(time1, dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1.0 animations:^{
btn1.frame=CGRectMake(btn1.frame.origin.x, showY1, btn1.frame.size.width, btn1.frame.size.height);
}];
UIButton *btn2=self.containerView.subviews[self.containerView.subviews.count-3];
CGFloat showY2=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-3] floatValue];
dispatch_time_t time2 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
dispatch_after(time2, dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1.0 animations:^{
btn2.frame=CGRectMake(btn2.frame.origin.x, showY2, btn2.frame.size.width, btn2.frame.size.height);
}];
UIButton *btn3=self.containerView.subviews[self.containerView.subviews.count-4];
CGFloat showY3=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-4] floatValue];
dispatch_time_t time3 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
dispatch_after(time3, dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1.0 animations:^{
btn3.frame=CGRectMake(btn3.frame.origin.x, showY3, btn3.frame.size.width, btn3.frame.size.height);
}];
UIButton *btn4=self.containerView.subviews[self.containerView.subviews.count-5];
CGFloat showY4=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-5] floatValue];
dispatch_time_t time4 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
dispatch_after(time4, dispatch_get_main_queue(), ^{
[UIView animateWithDuration:1.0 animations:^{
btn4.frame=CGRectMake(btn4.frame.origin.x, showY4, btn4.frame.size.width, btn4.frame.size.height);
}];
// UIButton *btn5=self.containerView.subviews[self.containerView.subviews.count-6];
//
// CGFloat showY5=[self.hiddenBtnYArray[self.hiddenBtnYArray.count-6] floatValue];
// dispatch_time_t time5 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.02 * NSEC_PER_SEC));
// dispatch_after(time5, dispatch_get_main_queue(), ^{
//
// [UIView animateWithDuration:1.0 animations:^{
//
// btn5.frame=CGRectMake(btn5.frame.origin.x, showY5, btn5.frame.size.width, btn5.frame.size.height);
//
// }];
//
dispatch_time_t time4 = dispatch_time(DISPATCH_TIME_NOW, (NSInteger)(0.6 * NSEC_PER_SEC));
dispatch_after(time4, dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.2 animations:^{
self.alpha=0.0;
[self removeFromSuperview];
}];
});
//
// });
});
});
});
});
});
}
//视图最常用的几个方法 awakeFromNib 加载视图通过xib的方式时 使用最多 initWithFrame加载视图用纯代码的时候使用最多 两者不能同事使用
-(instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
//初始化视图大小的时候 添加收拾 并给收拾相应的点击方法
UITapGestureRecognizer *tap=[[UITapGestureRecognizer alloc]init];
[tap addTarget:self action:@selector(clickCover)];
[self addGestureRecognizer:tap];
[self addSubview:self.containerView];
[self setSubviews];
}
return self;
}
//添加按钮
-(void)setSubviews{
[self.containerView addSubview:[self commonCreateMethod:@"qq"]];
[self.containerView addSubview:[self commonCreateMethod:@"qqZone"]];
[self.containerView addSubview:[self commonCreateMethod:@"weChat"]];
[self.containerView addSubview:[self commonCreateMethod:@"weChatLine"]];
[self.containerView addSubview:[self commonCreateMethod:@"sina"]];
// [self.containerView addSubview:[self commonCreateMethod:@"healthCheck"]];
}
//创建按钮的工作方法 初始化并且设置默认 高亮时的图片 对图片的处理
-(UIButton *)commonCreateMethod:(NSString *)imgName{
UIButton *btn=[[UIButton alloc]init];
btn.layer.cornerRadius=4;
btn.layer.masksToBounds=YES;
btn.tag=self.containerView.subviews.count;
[btn addTarget:self action:@selector(clickBtn:) forControlEvents:UIControlEventTouchUpInside];
[btn setImage:[UIImage imageNamed:imgName] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:imgName] forState:UIControlStateHighlighted];
//对图片的处理
btn.imageView.contentMode=UIViewContentModeScaleAspectFill;
btn.imageView.clipsToBounds=YES;
return btn;
}
//按钮的点击方法
-(void)clickBtn:(UIButton *)btn{
NSInteger index=btn.tag;
switch (index) {
case 0:{
[UMSocialData defaultData].extConfig.title = @"分享的title";
[UMSocialData defaultData].extConfig.qqData.url = @"http://share.miusky.com?picUrl=fds";
UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
@"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToQQ] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:nil completion:^(UMSocialResponseEntity *shareResponse){
if (shareResponse.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享QQ成功!");
}
}];
}
//QQ分享
break;
case 1:{
[UMSocialData defaultData].extConfig.title = @"蜜友天空";
[UMSocialData defaultData].extConfig.qzoneData.url=@"http://baidu.com";
UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
@"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToQzone] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:nil completion:^(UMSocialResponseEntity *shareResponse){
if (shareResponse.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享QQ空间成功!");
}
}];
}
//QQZone分享
break;
case 2:{
[UMSocialData defaultData].extConfig.title = @"蜜友天空";
[UMSocialData defaultData].extConfig.wechatSessionData.url=@"http://baidu.com";
UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
@"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToWechatSession] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:nil completion:^(UMSocialResponseEntity *shareResponse){
if (shareResponse.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享微信成功!");
}
}];
}
//微信分享
break;
case 3:{
[UMSocialData defaultData].extConfig.title = @"蜜友天空";
[UMSocialData defaultData].extConfig.wechatTimelineData.url=@"http://baidu.com";
UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
@"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToWechatTimeline] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:nil completion:^(UMSocialResponseEntity *shareResponse){
if (shareResponse.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享微信朋友圈成功!");
}
}];
}
//微信朋友圈分享
break;
default:{
[UMSocialData defaultData].extConfig.title = @"分享的title";
[UMSocialData defaultData].extConfig.sinaData.urlResource.url = @"http://baidu.com";
UMSocialUrlResource *urlResource = [[UMSocialUrlResource alloc] initWithSnsResourceType:UMSocialUrlResourceTypeImage url:
@"http://www.baidu.com/img/bdlogo.gif"];
[[UMSocialDataService defaultDataService] postSNSWithTypes:@[UMShareToSina] content:@"分享内嵌文字" image:nil location:nil urlResource:urlResource presentedController:nil completion:^(UMSocialResponseEntity *shareResponse){
if (shareResponse.responseCode == UMSResponseCodeSuccess) {
NSLog(@"分享新浪微博成功!");
}
}];
}
break;
}
}
//布局本类对象的子视图
-(void)layoutSubviews{
[super layoutSubviews];
//布局中间部分容器
self.containerView.frame=CGRectMake(0, 0, self.frame.size.width, 200);
//九宫格算法 布局按钮的位置
int colums=3;//每一行要显示的列数 及个数
CGFloat height=90; //视图的宽高
CGFloat width=90;
CGFloat marginTop=6;
CGFloat marginX=(self.frame.size.width-colums*width)/4; //视图x轴方向的间距
CGFloat marginY=7; //视图y轴方向的间距
CGFloat marginLeft=(self.frame.size.width-colums*width-(colums-1)*marginX)/2;//视图距离坐标的距离
self.containerView.center=self.center;
self.btnYArray=[NSMutableArray arrayWithCapacity:0];//初始化真实值的数组
self.hiddenBtnYArray=[NSMutableArray arrayWithCapacity:0];//初始化视图没执行动画之前的数组
//便利中间部分时间的子视图 计算并排不位置