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;
}
}
}











网友评论