介绍: 每次滚动都会触发 didScroll 这个方法, 每次滚动都会有一个偏移量,滚动的快慢决定每一次偏移量的大小,可以通过两次滚动偏移量差,判断速度,从而根据速度大小对导航栏做一些操作
{
CGFloat _contentOffsetY;//上次的offset
CGFloat _contentOffsetSpeed;//与上次的滚差,用于判断速度
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{//只会触发上拉加载更多
if (scrollView.contentOffset.y > _contentOffsetY){//上滚
//TGLog(@"up %f",scrollView.contentOffset.y);
if (scrollView.contentOffset.y > 0){
//隐藏,放入nav
//通知形式
if((scrollView.contentOffset.y - _contentOffsetY) > _contentOffsetSpeed && _contentOffsetSpeed>20){//速度超过20隐藏
//滚速递减则不再发通知
//隐藏导航栏
[[NSNotificationCenter defaultCenter] postNotificationName:NavigationBarHiddenNotification object:nil userInfo:nil];
}
_contentOffsetSpeed = scrollView.contentOffset.y - _contentOffsetY;
}
}else{
//显示,回归原位
//通知形式
if (scrollView.contentOffset.y > 0){
//显示导航栏
if (_contentOffsetY - scrollView.contentOffset.y > _contentOffsetSpeed && _contentOffsetSpeed>20){//速度超过20显示
[[NSNotificationCenter defaultCenter] postNotificationName:NavigationBarShowNotification object:nil userInfo:nil];
}
_contentOffsetSpeed = _contentOffsetY - scrollView.contentOffset.y;
}else if (fabs(scrollView.contentOffset.y) > NavMaxY && fabs(scrollView.contentOffset.y) < NavMaxY+TitleVH){
//显示导航栏
[[NSNotificationCenter defaultCenter] postNotificationName:NavigationBarShowNotification object:nil userInfo:nil];
}
}
_contentOffsetY = scrollView.contentOffset.y;
}