美文网首页
UIScrollView判断滚动方向

UIScrollView判断滚动方向

作者: 似奔跑的野马 | 来源:发表于2018-03-09 10:39 被阅读0次

UIScrollView继承自UIView,实现原理,给UIScrollView加一个拖拽手势,通过动态修改bounds实现UIView的滚动。

扩展

以我的理解来看,bounds以自己的右上角为参照点,从底层OpenGL 来看,应该对应本地坐标系(local coordinate),修改bounds应该底层应该是修改了模型矩阵(model matrix).想深入的可以试试...

实现原理

UIScrollView滚动时会修改对应的contentOffset属性,可以通过监听这个属性的变化,进行判断。

[self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew context:NULL];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
{
    if(object == self.tableView && [keyPath isEqualToString:@"contentOffset"]) {
        CGFloat oldOffsetY = [change[NSKeyValueChangeOldKey] CGPointValue].y;
        CGFloat newOffsetY = [change[NSKeyValueChangeNewKey] CGPointValue].y;
        CGFloat deltaY = newOffsetY - oldOffsetY;
        
        if(deltaY >= 0) {  //向上滚动
            _scrollUp =  YES;
        }else if(deltaY < 0){  //向下滚动
            _scrollUp = NO;
        }
    }
}

相关文章

网友评论

      本文标题:UIScrollView判断滚动方向

      本文链接:https://www.haomeiwen.com/subject/xbkpfftx.html