【无限互联】IOS开发之下拉刷新控件
2014-10-05 15:04
197 查看
本节要点:
1.掌握下拉刷新、上拉加载控件的使用
2.大概了解实现原理
控件的使用:
1.添加头部控件的方法
[self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];
或者
[self.tableView addHeaderWithCallback:^{ }];
2.添加尾部控件的方法
[self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
或者
[self.tableView addFooterWithCallback:^{ }];
3.
可以在MJRefreshConst.h和MJRefreshConst.m文件中自定义显示的文字内容和文字颜色
4.自动进入刷新状态
1> [self.tableView headerBeginRefreshing];
2> [self.tableView footerBeginRefreshing];
5.结束刷新
1> [self.tableView headerEndRefreshing];
2> [self.tableView footerEndRefreshing];
实现原理:
1.通过调用[self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];这个方法跳转到下面代码,
MJRefreshHeaderView调用它的类方法header来创建一个新的header。
- (void)addHeaderWithTarget:(id)target
action:(SEL)action
{
// 1.创建新的header
if (!self.header) {
MJRefreshHeaderView *header = [MJRefreshHeaderViewheader];
[selfaddSubview:header];
self.header = header;
}
// 2.设置目标和回调方法
self.header.beginRefreshingTaget = target;
self.header.beginRefreshingAction = action;
}
2.控制控件的刷新状态,定义了一个枚举
typedef enum {
MJRefreshStatePulling =1,//
松开就可以进行刷新的状态
MJRefreshStateNormal =2,//
普通状态
MJRefreshStateRefreshing =3,//
正在刷新中的状态
MJRefreshStateWillRefreshing =4
} MJRefreshState;
3.改变枚举状态
- (void)adjustStateWithContentOffset
{
//
当前的contentOffset
CGFloat currentOffsetY =self.scrollView.mj_contentOffsetY;
//
头部控件刚好出现的offsetY
CGFloat happenOffsetY = -self.scrollViewOriginalInset.top;
//如果是向上滚动到看不见头部控件,直接返回
if (currentOffsetY >= happenOffsetY)return;
if (self.scrollView.isDragging) {
//
普通 和
即将刷新 的临界点
CGFloat normal2pullingOffsetY = happenOffsetY -self.mj_height;
if (self.state ==MJRefreshStateNormal
&& currentOffsetY < normal2pullingOffsetY) {
//转为即将刷新状态
self.state =MJRefreshStatePulling;
}elseif (self.state ==MJRefreshStatePulling
&& currentOffsetY >= normal2pullingOffsetY) {
//转为普通状态
self.state =MJRefreshStateNormal;
}
} elseif (self.state
==MJRefreshStatePulling) {//即将刷新 &&手松开
//开始刷新
self.state =MJRefreshStateRefreshing;
}
}
4.当MJRefreshState的状态改变时通过一个switch语句,根据状态执行不同的操作
switch (state) {
caseMJRefreshStateNormal://普通状态
{
if (self.state
== MJRefreshStateRefreshing) {
[UIViewanimateWithDuration:MJRefreshSlowAnimationDuration
*0.6
animations:^{
self.activityView.alpha =0.0;
}completion:^(BOOL finished) {
//停止转圈圈
[self.activityViewstopAnimating];
//恢复alpha
self.activityView.alpha =1.0;
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(MJRefreshSlowAnimationDuration *NSEC_PER_SEC)),dispatch_get_main_queue(),
^{
//再次设置回normal
_state =MJRefreshStatePulling;
self.state =MJRefreshStateNormal;
});
//直接返回
return;
}else {
//显示箭头
self.arrowImage.hidden =NO;
//停止转圈圈
[self.activityViewstopAnimating];
}
break;
}
caseMJRefreshStatePulling:
break;
caseMJRefreshStateRefreshing:
{
//开始转圈圈
[self.activityViewstartAnimating];
//隐藏箭头
self.arrowImage.hidden
= YES;
//回调
if ([self.beginRefreshingTagetrespondsToSelector:self.beginRefreshingAction])
{
objc_msgSend(self.beginRefreshingTaget,self.beginRefreshingAction,self);
}
if (self.beginRefreshingCallback) {
self.beginRefreshingCallback();
}
break;
}
default:
break;
}
5.改变文字的内容
- (void)settingLabelText
{
switch (self.state) {
caseMJRefreshStateNormal:
//设置文字
self.statusLabel.text =self.pullToRefreshText;
break;
caseMJRefreshStatePulling:
//设置文字
self.statusLabel.text =self.releaseToRefreshText;
break;
caseMJRefreshStateRefreshing:
//设置文字
self.statusLabel.text =self.refreshingText;
break;
default:
break;
}
}
1.掌握下拉刷新、上拉加载控件的使用
2.大概了解实现原理
控件的使用:
1.添加头部控件的方法
[self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];
或者
[self.tableView addHeaderWithCallback:^{ }];
2.添加尾部控件的方法
[self.tableView addFooterWithTarget:self action:@selector(footerRereshing)];
或者
[self.tableView addFooterWithCallback:^{ }];
3.
可以在MJRefreshConst.h和MJRefreshConst.m文件中自定义显示的文字内容和文字颜色
4.自动进入刷新状态
1> [self.tableView headerBeginRefreshing];
2> [self.tableView footerBeginRefreshing];
5.结束刷新
1> [self.tableView headerEndRefreshing];
2> [self.tableView footerEndRefreshing];
实现原理:
1.通过调用[self.tableView addHeaderWithTarget:self action:@selector(headerRereshing)];这个方法跳转到下面代码,
MJRefreshHeaderView调用它的类方法header来创建一个新的header。
- (void)addHeaderWithTarget:(id)target
action:(SEL)action
{
// 1.创建新的header
if (!self.header) {
MJRefreshHeaderView *header = [MJRefreshHeaderViewheader];
[selfaddSubview:header];
self.header = header;
}
// 2.设置目标和回调方法
self.header.beginRefreshingTaget = target;
self.header.beginRefreshingAction = action;
}
2.控制控件的刷新状态,定义了一个枚举
typedef enum {
MJRefreshStatePulling =1,//
松开就可以进行刷新的状态
MJRefreshStateNormal =2,//
普通状态
MJRefreshStateRefreshing =3,//
正在刷新中的状态
MJRefreshStateWillRefreshing =4
} MJRefreshState;
3.改变枚举状态
- (void)adjustStateWithContentOffset
{
//
当前的contentOffset
CGFloat currentOffsetY =self.scrollView.mj_contentOffsetY;
//
头部控件刚好出现的offsetY
CGFloat happenOffsetY = -self.scrollViewOriginalInset.top;
//如果是向上滚动到看不见头部控件,直接返回
if (currentOffsetY >= happenOffsetY)return;
if (self.scrollView.isDragging) {
//
普通 和
即将刷新 的临界点
CGFloat normal2pullingOffsetY = happenOffsetY -self.mj_height;
if (self.state ==MJRefreshStateNormal
&& currentOffsetY < normal2pullingOffsetY) {
//转为即将刷新状态
self.state =MJRefreshStatePulling;
}elseif (self.state ==MJRefreshStatePulling
&& currentOffsetY >= normal2pullingOffsetY) {
//转为普通状态
self.state =MJRefreshStateNormal;
}
} elseif (self.state
==MJRefreshStatePulling) {//即将刷新 &&手松开
//开始刷新
self.state =MJRefreshStateRefreshing;
}
}
4.当MJRefreshState的状态改变时通过一个switch语句,根据状态执行不同的操作
switch (state) {
caseMJRefreshStateNormal://普通状态
{
if (self.state
== MJRefreshStateRefreshing) {
[UIViewanimateWithDuration:MJRefreshSlowAnimationDuration
*0.6
animations:^{
self.activityView.alpha =0.0;
}completion:^(BOOL finished) {
//停止转圈圈
[self.activityViewstopAnimating];
//恢复alpha
self.activityView.alpha =1.0;
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,
(int64_t)(MJRefreshSlowAnimationDuration *NSEC_PER_SEC)),dispatch_get_main_queue(),
^{
//再次设置回normal
_state =MJRefreshStatePulling;
self.state =MJRefreshStateNormal;
});
//直接返回
return;
}else {
//显示箭头
self.arrowImage.hidden =NO;
//停止转圈圈
[self.activityViewstopAnimating];
}
break;
}
caseMJRefreshStatePulling:
break;
caseMJRefreshStateRefreshing:
{
//开始转圈圈
[self.activityViewstartAnimating];
//隐藏箭头
self.arrowImage.hidden
= YES;
//回调
if ([self.beginRefreshingTagetrespondsToSelector:self.beginRefreshingAction])
{
objc_msgSend(self.beginRefreshingTaget,self.beginRefreshingAction,self);
}
if (self.beginRefreshingCallback) {
self.beginRefreshingCallback();
}
break;
}
default:
break;
}
5.改变文字的内容
- (void)settingLabelText
{
switch (self.state) {
caseMJRefreshStateNormal:
//设置文字
self.statusLabel.text =self.pullToRefreshText;
break;
caseMJRefreshStatePulling:
//设置文字
self.statusLabel.text =self.releaseToRefreshText;
break;
caseMJRefreshStateRefreshing:
//设置文字
self.statusLabel.text =self.refreshingText;
break;
default:
break;
}
}
相关文章推荐
- 【无限互联】iOS开发block用法之UIAlertView控件的修改
- iOS开发>>>UITableView下拉刷新控件的使用
- UIControl IOS控件编程—IOS开发
- UISwitch 开关控件—IOS开发
- UIPageControl 分页控件-IOS开发
- UIButton按钮控件-iOS开发
- UISegmentedControl 分段控件-IOS开发
- IOS开发笔记(五)---基础控件的使用(Text Filed ,Image View,Slider等)
- iOS开发:UIPickerView控件
- UIButton 按钮控件-IOS开发
- UISlider 滑块控件—IOS开发
- UIControl IOS控件编程—IOS开发
- UISlider 滑块控件—IOS开发
- UIControl IOS控件编程—IOS开发
- UIButton 按钮控件-IOS开发
- UISwitch 开关控件—IOS开发
- UITextField 文本字段控件-IOS开发
- UIPageControl 分页控件-IOS开发
- UIPageControl 分页控件-IOS开发
- iOS开发3:UITextField控件的属性