EGORefreshTableHeaderView是个好东西,把复杂的下拉刷新实现开源了出来。
当然,有些地方我们可以进行一些优化,比如下拉的展现效果。
这个效果怎么实现呢?我们需要修改引入的EGORefreshTableHeaderView.m文件,代码如下:
- (void)egoRefreshScrollViewDidScroll:(UIScrollView *)scrollView {
if (_state == EGOOPullRefreshLoading) {
CGFloat offset = MAX(scrollView.contentOffset.y * -1, 0);
offset = MIN(offset, 60);
scrollView.contentInset = UIEdgeInsetsMake(offset, 0.0f, 0.0f, 0.0f);
} else if (scrollView.isDragging) {
//计算更新时间
[self refreshLastUpdatedDateNew];
BOOL _loading = NO;
if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDataSourceIsLoading:)]) {
_loading = [_delegate egoRefreshTableHeaderDataSourceIsLoading:self];
}
if (_state == EGOOPullRefreshPulling && scrollView.contentOffset.y > -65.0f && scrollView.contentOffset.y < 0.0f && !_loading) {
[self setState:EGOOPullRefreshNormal];
} else if (_state == EGOOPullRefreshNormal && scrollView.contentOffset.y < -65.0f && !_loading) {
[self setState:EGOOPullRefreshPulling];
}
if (scrollView.contentInset.top != 0) {
scrollView.contentInset = UIEdgeInsetsZero;
}
}
}
注意红色的那一行,就是自定义实现更新时间格式。
- (void)refreshLastUpdatedDateNew {
if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDataSourceLastUpdated:)]) {
NSDate *date = [_delegate egoRefreshTableHeaderDataSourceLastUpdated:self];
_lastUpdatedLabel.text = [NSString stringWithFormat:@"上次更新: %@", [self formatTimeStrNew:date]];
} else {
_lastUpdatedLabel.text = nil;
}
}
//自定义时间展示
- (NSString *)formatTimeStr:(NSDate *)lastDate
{
NSString *timeStr = @"";
if (!lastDate) {
return timeStr;
}
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehaviorDefault];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"];
return [dateFormatter stringFromDate:lastDate];
}
注意,refreshLastUpdateDateNew是在egoRefreshScrollViewDidScroll函数里被调用的,这样才能做到每次更新。
另外,记得把
setState:(EGOPullRefreshState)aState
里的原来时间展示的代码屏蔽掉。
//[self refreshLastUpdatedDate];