UIScrollView的状态介绍
tracking
手指是否触控屏幕(可能还未拖动)dragging
手指是否正在拖动decelerating
拖动结束,正在减速
一个拖动流程发生了哪些调用
BeginTracking 手指触控,还未拖动
BeginDragging 开始拖动
offset改变
...
offset改变
scrollViewWillEndDragging 拖动将结束(手指离开屏幕)
scrollViewDidEndDragging willDecelerate 拖动结束 将要减速
EndTracking 触控结束
scrollViewWillBeginDecelerating 将要减速
offset改变
...
offset改变
scrollViewDidEndDecelerating 减速结束
UIScrollView代理函数介绍
根据调用过程,找到你需要的函数去用就好了
// 任何offset改变
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
// 开始拖动
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
// 拖动将要结束
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset API_AVAILABLE(ios(5.0));
// 拖动结束 将要减速
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
// 将要减速
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;
// 减速结束
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
使用约束固定子组件位置
@property (nonatomic, strong) UIScrollView *mainView;
@property (nonatomic, strong) UIView *firstView;
[self.firstView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.top.mas_equalTo(self.mainView);
make.width.mas_equalTo(350);
make.height.mas_equalTo(100);
}];
由于scrollView的宽高是不确定的,所以不能直接
make.left.top.right.bottom.mas_equalTo(self.mainView);