关于UIScrollView左右滚动判断
UIScrollView 实践经验
目录
- UIScrollView的常见属性
- contentSize 内容的尺寸
- contentOffset 滚动的位置(偏移量)
- contentInset 内容视图,增加额外的滚动区域
- UIScrollView的其他属性
- bounces 设置是否需要弹簧效果
- scrollEnabled 是否能滚动
- showsHorizontalScrollIndicator 是否显示水平滚动条
- showsVerticalScrollIndicator 是否显示垂直滚动条
- scrollView.layer.masksToBounds = NO 不受边距影
响,可以超出scrollView的大小 - 隐藏Cell之间的分割线
- UIScrollView 设置代理
- UIScrollViewDelegate 协议方法
- UIScrollView 设置移动动画
-- block 设置
补充:ScrollView的底部被标签栏控制器(tabBar)遮挡的解决办法
//设置ScrollView高度减去113(导航栏高度64加标签栏高度49)
self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, self.view.width, self.view.heigh t- 113)];
如果需要scrollView遮盖,某些可以点击事件的控件,当scrollView移开控件是还可以获取点击事件,需要设置
1.scrollView的高度不能遮盖控件
2.下面这个属性可以让子视图的移动边距不受ScrollView的边距影响,可以显示出去
//ScrollView的子视图不受边距的影响,可以超出
scrollViewscrollView.layer.masksToBounds = NO;
注意事项
- UIScrollView创建时,会自动创建2个子控件(上下滑块/左右滑块);
- 获取添加在UIScrollView的子控件时,最好不要使用:
[self.scrollView.subviews firstObject];
[self.scrollView.subviews lastObject];
上面两个方法,可能会获取到滑块控件;
- 也不要用子控件的下标来获取;当用户滑动scrollView时,滑块在视图的位置是随机的,容易获取错误。
UIScrollView的常见属性
contentSize 内容的尺寸:
这个属性用来表示UIScrollView滚动的位置
- 仅上下移动,设置高度
- 仅左右移动,设置宽度
@property (nonatomic) CGPointcontentOffset;
self.scrollView.contentSize
contentOffset 设置偏移量:
这个属性用来表示UIScrollView滚动的位置
@property (nonatomic) CGSizecontentSize;
self.scrollView.contentOffset
contentInset 增加额外的滚动区域:
这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住
@property(nonatomic) UIEdgeInsets contentInset;
self.scrollView.contentInset = UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)
UIScrollView的其他属性
设置UIScrollView是否需要弹簧效果
@property(nonatomic) BOOL bounces;
设置UIScrollView是否能滚动
@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
是否显示水平滚动条
@property(nonatomic) BOOL showsHorizontalScrollIndicator;
是否显示垂直滚动条
@property(nonatomic) BOOL showsVerticalScrollIndicator;
ScrollView的子视图不受边距的影响,可以超出scrollView
scrollView.layer.masksToBounds = NO;
隐藏Cell之间的分割线
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
UIScrollView设置代理
设置代理
self.scrollview.delegate = self;
设置协议
@interface ViewController () <UIScrollViewDelegate>
UIScrollViewDelegate协议方法
滚动相关
- 当scrollView滚动的时候时时调用这个方法
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//获取scrollView的偏移量
CGPoint point = scrollView.contentOffset;
NSLog(@"正在滚动:%@", NSStringFromCGPoint(point));
}
- 即将开始拖拽的时候调用
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"开始拖拽");
}
- 结束拖拽的时候调用
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
NSLog(@"已经停止滚动");
}
- 将要停止拖拽的时候调用这个方法(将要松手的时候)
- 参数1:委托
- 参数2:停止拖拽后x和y方向的加速度
- 参数3:滚动停止的时候scrollView的偏移量(停止滚动的时候的位置信息)
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
NSLog(@"停止拖拽:%@", NSStringFromCGPoint(*targetContentOffset));
}
- (减速完毕)由于惯性停止滚动的时候调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"已经停止拖拽");
}
- 滚动将要开始减速的时候会调用这个方法
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@"开始减速");
}
- 已经停止滚动动画的时候调用
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{
这个停止是停止通过setContentOffset:animated:这个方法产生的动画
NSLog(@"停止滚动动画");
}
- 设置点击状态栏是否可以回到顶部(默认是YES)
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
return YES;
}
- 已经回到顶部的时候会调用这个方法
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
NSLog(@"回到顶部");
}
缩放相关
- 告诉scrollView,缩放对象 (返回值就是需要缩放的对象)
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return [scrollView viewWithTag:100];
}