websocket可以做什么MJRefresh框架使用及说明
一.MJRefresh的类解释.
1.MJRefreshComponent所有刷新控件的基类别.(component:成分,组件)
2.MJRefreshNormalHeader默认的下拉刷新控件
3.MJRefreshAutoNormalFooter默认的上拉刷新控件下拉刷新控件自适应在页面内容下面
4.MJRefreshAutoGifFooter带动态图的上拉加载控件下拉刷新控件自适应在页面内容下面
5.MJRefreshBackNormalFooter默认的上拉刷新控件下拉刷新控件一直在屏幕底部
6.MJREfreshBackGifFooter默认的上拉动画刷新控件下拉刷新控件一直在屏幕底部
总结:刷新控件分为:header和footer控件.头部和尾部刷新控件
刷新控件分为normal和gif状态.普通状态和刷新控件和gif动态图的刷新控件
尾部刷新控件又分为:auto和back两个模式自适应尾部刷新控件位置和刷新控件位置在底部.
二.各个类中提供的外部方法.
1.MJRefreshComponent
(1)beginRefreshing//开始刷新,进入页面想要自动刷新的时候调用.
isRefreshing//是否正在刷新
endRefreshing//结束刷新,网络请求结束的时候使用.
(2)MJRefreshState刷新控件的状态
复制代码
复制代码
/刷新控件的状态/
typedefNS_ENUM(NSInteger,MJRefreshState){
/普通闲置状态/
MJRefreshStateIdle=1,
/松开就可以进行刷新的状态/
MJRefreshStatePulling,
/正在刷新中的状态/
MJRefreshStateRefreshing,
/即将刷新的状态/
MJRefreshStateWillRefresh,
/所有数据加载完毕,没有更多的数据了/
MJRefreshStateNoMoreData
};
复制代码
复制代码
(3)automaticallyChangeAlpha根据拖拽比例自动切换透明度
2.MJRefreshHeader
(1)
/这个key用来存储上一次下拉刷新成功的时间/
@property(copy,nonatomic)NSStringlastUpdatedTimeKey;
/上一次下拉刷新成功的时间/
@property(strong,nonatomic,readonly)NSDatelastUpdatedTime;
(2)
/创建header/
+(instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/创建header/
+(instancetype)headerWithRefreshingTarget:(id)targetrefreshingAction:(SEL)action;
3.MJRefreshFooter
(1)
/创建footer/
+(instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/创建footer/
+(instancetype)footerWithRefreshingTarget:(id)targetrefreshingAction:(SEL)action;
(2)endRefreshingWithNoMoreData提示没有更多数据.
resetNoMoreData重置没有更多数据
(3)automaticallyHidden自动根据有无数据来显示或者隐藏(有数据就显示,没数据就隐藏.默认为NO)
三.具体使用
1.默认的刷新方式
头部刷新控件:MJRefreshNormalHeader
尾部刷新控件:MJRefreshAutoNormalFooter
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
//默认的下拉刷新和上拉加载
self.tableView.mj_header=[MJRefreshNormalHeaderheaderWithRefreshingBlock:^{
//这个地方是网络请求的处理
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_headerendRefreshing];
});
}];
self.tableView.mj_footer=[MJRefreshAutoNormalFooterfooterWithRefreshingBlock:^{
//这个地方是网络请求的处理
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_footerendRefreshing];
});
}];
}
return_tableView;
}
2.显示动画
头部刷新控件:MJRefreshGifHeader
尾部刷新控件:MJRefreshAutoGifFooter/MJRefreshBackGifFooter
复制代码
复制代码
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
MJRefreshGifHeaderheader=[MJRefreshGifHeaderheaderWithRefreshingBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(3NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_headerendRefreshing];
});
}];
NSMutableArrayarrayM=[NSMutableArrayarrayWithCapacity:0];
for(inti=0;i<30;i++){
UIImageimage=[UIImageimageNamed:[NSStringstringWithFormat:@"xz_flower_%d",i+1]];
[arrayMaddObject:image];
}
//设置普通状态下的动画图片-->静止的一张图片
NSArraynormalImagesArray=@[[UIImageimageNamed:@"xz_flower_1"]];
[headersetImages:normalImagesArrayforState:MJRefreshStateIdle];
//设置即将刷新状态的动画图片
[headersetImages:arrayMforState:MJRefreshStatePulling];
//设置正在刷新状态的动画图片
[headersetImages:arrayMforState:MJRefreshStateRefreshing];
//设置header
self.tableView.mj_header=header;
}
return_tableView;
}
3.设置刷新控件的时间和状态的显示或者隐藏
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
MJRefreshGifHeaderheader=[MJRefreshGifHeaderheaderWithRefreshingBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(3NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_headerendRefreshing];
});
}];
NSMutableArrayarrayM=[NSMutableArrayarrayWithCapacity:0];
for(inti=0;i<30;i++){
UIImageimage=[UIImageimageNamed:[NSStringstringWithFormat:@"xz_flower_%d",i+1]];
[arrayMaddObject:image];
}
NSArraynormalImagesArray=@[[UIImageimageNamed:@"xz_flower_1"]];
[headersetImages:normalImagesArrayforState:MJRefreshStateIdle];
[headersetImages:arrayMforState:MJRefreshStatePulling];
[headersetImages:arrayMforState:MJRefreshStateRefreshing];
//隐藏时间
header.lastUpdatedTimeLabel.hidden=YES;
//隐藏状态
header.stateLabel.hidden=YES;
//设置header
self.tableView.mj_header=header;
}
return_tableView;
}
复制代码
复制代码
4.自定义刷新控件的文字大小和颜色
复制代码
复制代码
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
MJRefreshNormalHeaderheader=[MJRefreshNormalHeaderheaderWithRefreshingBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_headerendRefreshing];
});
}];
//设置文字
[headersetTitle:@"下拉刷新"forState:MJRefreshStateIdle];
[headersetTitle:@"更新"forState:MJRefreshStatePulling];
[headersetTitle:@"Loading..."forState:MJRefreshStateRefreshing];
//设置字体
header.stateLabel.font=[UIFontsystemFontOfSize:15];
header.lastUpdatedTimeLabel.font=[UIFontsystemFontOfSize:12];
//设置颜色
header.stateLabel.textColor=[UIColorredColor];
header.lastUpdatedTimeLabel.textColor=[UIColorredColor];
[headerbeginRefreshing];
self.tableView.mj_header=header;
return_tableView;
}
5.当全部加载完毕的时候,改变尾部刷新控件的显示(不允许再刷新)
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
MJRefreshAutoNormalFooterfooter=[MJRefreshAutoNormalFooterfooterWithRefreshinwww.baiyuewang.netgBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_footerendRefreshing];
[self.tableView.mj_footerendRefreshingWithNoMoreData];
});
}];
self.tableView.mj_footer=footer;
}
return_tableView;
重设加载完毕
[self.tableView.mj_footerresetNoMoreData];
6.自定义刷新控件
继承MJRefreshHeader/MJRefreshGifHeader/MJRefreshAutoGifFooter/MJRefreshBackGifFooter/MJRefreshAutoFooter/MJRefreshBackFooter
#import"MJRefreshHeader.h"
@interfaceMCDIYHeader:MJRefreshHeader
@end
#import"MCDIYHeader.h"
@interfaceMCDIYHeader()
@property(weak,nonatomic)UILabellabel;
@property(weak,nonatomic)UISwitchs;
@property(weak,nonatomic)UIImageViewlogo;
@property(weak,nonatomic)UIActivityIndicatorViewloading;
@end
@implementationMCDIYHeader
#pragmamark-重写方法
#pragmamark在这里做一些初始化配置(比如添加子控件)
-(void)prepare{
[superprepare];
//设置控件的高度
self.mj_h=50;
//添加label
UILabellabel=[[UILabelalloc]init];
label.textColor=[UIColorcolorWithRed:1.0green:0.5blue:0.0alpha:1.0];
label.font=[UIFontboldSystemFontOfSize:16];
label.textAlignment=NSTextAlignmentCenter;
[selfaddSubview:label];
self.label=label;
//打酱油的开关
UISwitchs=[[UISwitchalloc]init];
[selfaddSubview:s];
self.s=s;
//logo
UIImageViewlogo=[[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"Logo"]];
logo.contentMode=UIViewContentModeScaleAspectFit;
[selfaddSubview:logo];
self.logo=logo;
//loading
UIActivityIndicatorViewloading=[[UIActivityIndicatorViewalloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[selfaddSubview:loading];
self.loading=loading;
}
#pragmamark在这里设置子控件的位置和尺寸
-(void)placeSubviews
{
[superplaceSubviews];
self.label.frame=self.bounds;
self.logo.bounds=CGRectMake(0,0,self.bounds.size.width,100);
self.logo.center=CGPointMake(self.mj_w0.5,-self.logo.mj_h+20);
self.loading.center=CGPointMake(self.mj_w-30,self.mj_h0.5);
#pragmamark监听scrollView的contentOffset改变
-(void)scrollViewContentOffsetDidChange:(NSDictionary)change
[superscrollViewContentOffsetDidChange:change]
#pragmamark监听scrollView的contentSize改变
-(void)scrollViewContentSizeDidChange:(NSDictionary)change
[superscrollViewContentSizeDidChange:change];
#pragmamark监听scrolwww.tt951.comlView的拖拽状态改变
-(void)scrollViewPanStateDidChange:(NSDictionary)change
[superscrollViewPanStateDidChange:change];
#pragmamark监听控件的刷新状态
-(void)setState:(MJRefreshState)state
MJRefreshCheckState;
switch(state){
caseMJRefreshStateIdle:
[self.loadingstopAnimating];
[self.ssetOn:NOanimated:YES];
self.label.text=@"赶紧下拉吖(开关是打酱油滴)";
break;
caseMJRefreshStatePulling:
[self.loadingstopAnimating];
[self.ssetOn:YESanimated:YES];
self.label.text=@"赶紧放开我吧(开关是打酱油滴)";
break;
caseMJRefreshStateRefreshing:
[self.ssetOn:YESanimated:YES];
self.label.text=@"加载数据中(开关是打酱油滴)";
[self.loadingstartAnimating];
break;
default:
break;
}
#pragmamark监听拖拽比例(控件被拖出来的比例)
-(void)setPullingPercent:(CGFloat)pullingPercent
{
[supersetPullingPercent:pullingPercent];
//1.00.50.0
//0.50.00.5
CGFloatred=1.0-pullingPercent0.5;
CGFloatgreen=0.5-0.5pullingPercent;
CGFloatblue=0.5pullingPercent;
self.label.textColor=[UIColorcolorWithRed:redgreen:greenblue:bluealpha:1.0];
}
@end
使用:
-(UITableView)tableView
{
if(!_tableView)
{
self.tableView=[[UITableViewalloc]initWithFrame:CGRectZerostyle:UITableViewStylePlain];
self.tableView.dataSource=self;
self.tableView.delegate=self;
//使用自定的刷新控件
self.tableView.mj_header=[MCDIYHeaderheaderWithRefreshingBlock:^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2NSEC_PER_SEC)),dispatch_get_main_queue(),^{
[self.tableView.mj_headerendRefreshing];
});
[self.tableView.mj_headerbeginRefreshing];
}];
}
return_tableView;
}
|
|