1.概述
- 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
- 通常在展示的内容超出屏幕的时候,用户可以通过手势滑动来查看屏幕之外的内容
- 我们一般显示内容是在控制器的UIView上显示的,但是UIView不具备滚动(滑动)功能,不适合显示超出屏幕的内容
- 在IOS中,苹果为我们提供了具备滚动功能的视图控件UIScrollView,可以用来展示大量的内容,我们可以通过滚动查看所有的内容
2.基本属性
// 0.在Storyboard中拖拽了UIScrollView到视图上,并将UIScrollView和控制器中的属性SC连线
@property (weak, nonatomic) IBOutlet UIScrollView *sc;
// 1.创建子控件
// 根据图片创建UIImageView,一创建出来UIImageView的尺寸就是图片的尺寸
UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"big"]];
// 2.添加到sc中
[self.sc addSubview:iv];
/******************SC基本属性****************************/
// 3.设置contentSize滚动区域(滚动区域为iv的size,iv的size由图片大小决定,即最终SC的滚动位置为整个图片的size)
self.sc.backgroundColor = [UIColor yellowColor];
self.sc.contentSize = iv.frame.size;
// 4.设置滚动条样式,以及滚动条不可见,滚动条为SC的子控件,设置滚动条不可见,即将滚动条从SC上移除(在没有移除滚动条的情况下,建议不要使用subViews提取scrollView的子控件,可能取出的事滚动条)
/**
UIScrollViewIndicatorStyleDefault, // 默认是黑的白底
UIScrollViewIndicatorStyleBlack, // 黑色滚动条
UIScrollViewIndicatorStyleWhite // 小的白色滚动条
*/
self.sc.indicatorStyle = UIScrollViewIndicatorStyleWhite;
self.sc.showsHorizontalScrollIndicator = NO;
self.sc.showsVerticalScrollIndicator = NO;
// 5.1 默认情况下只要设置了contentSize属性就会有回弹效果,在没有设置contentSize属性的情况下我们也可以设置默认情况下的回弹效果
self.sc.alwaysBounceHorizontal = YES;
self.sc.alwaysBounceVertical = YES;
// 5.2 设置弹簧效果无效
self.sc.bounces = NO;
// 6.SC不能滚动的情况
// 6.1没有设置contentSize属性
// 6.2scrollEnabled属性为NO
// 6.3userInteractionEnabled属性为NO
// self.sc.scrollEnabled = NO;
// self.sc.userInteractionEnabled = NO;
// 7.设置SC的contentInset属性,可以在contentSize四周设置额外的滚动区域
self.sc.contentInset = UIEdgeInsetsMake(10, 20, 30, 40);
3.contentOffset属性
- contentOffset属性就是位偏移,其实就是设置scrollView的滚动位置
- contentOffset是一个CGPoint的结构体,它以滚动区域的左上角为坐标原点,所以设置scrollView的contentOffset属性就是设置它在滚动视图上的坐标位置
- 代码演示
// 通过动画设置SC滚动到x为100的位置
/*
[UIView animateWithDuration:1.0 animations:^{
self.sc.contentOffset = CGPointMake(100, 0);
}];
*/
// ScollView本身有提供滚动的动画方法(建议在SC中使用自带的动画方法)
// 取出Scrollview的size
CGFloat scollViewW = self.sc.frame.size.width;
CGFloat scollViewH = self.sc.frame.size.height;
// 取出内容视图的size
CGFloat contentW = self.sc.contentSize.width;
CGFloat contentH = self.sc.contentSize.height;
// 滚动到左上角
// [self.sc setContentOffset:CGPointMake(0, 0) animated:YES];
// 滚动到左下角
// [self.sc setContentOffset:CGPointMake(0, contentH - scollViewH) animated:YES];
// 滚动到右上角
// [self.sc setContentOffset:CGPointMake(contentW - scollViewW, 0) animated:YES];
// 滚动到右下角
[self.sc setContentOffset:CGPointMake(contentW - scollViewW, contentH - scollViewH) animated:YES];