在做滑动隐藏/显示控件时,我们一般使用的是这个方法:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
if (self.contentOffseY < targetContentOffset->y) {
// 只有当 velocity.y 不等于0的时候,才是有效的滑动,这样可以避免一些bug(感兴趣的可以把这个判断去掉试试效果)
if (velocity.y != 0) {
// 隐藏控件
[self setSelectionViewHide:velocity.y > 0];
}
}else if(self.contentOffseY > targetContentOffset->y) {
if (velocity.y != 0) {
// 显示控件
[self setSelectionViewHide:velocity.y > 0];
}
}
// 保存当前的contentOffseY,用于下次比较大小
self.contentOffseY = targetContentOffset->y;
}
这里有个判断: velocity.y != 0
主要是解决在向下滑动时,松开手指后,页面还在滑动,如果这个时候,再用手指按住屏幕,滑动会突然停止,这时候会调用到这个方法,velocity.y 这个时候会等于0。
如果没有这个判断,会导致控件显示/隐藏错乱,有了这个判断后,就完全不会出现显示/隐藏错乱的问题了。如果有集成了上拉/下拉刷新的话,这个问题会更加的明显。
网友评论