- 顾名思义,UIScrollView 就是负责滚动的视图
- 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限
- 当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容
- 普通的 UIView 不具备滚动功能,不能显示过多的内容
- UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容
- iOS 开发中几个重要的控件都继承自 UIScrollView
- UITableView 表格视图
- UICollectionView 集合视图
- UITextView 文本视图
代码创建ScrollView和UIImageView
// ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIScrollView *scrollView = [[UIScrollView alloc] init];
// 设置scrollview大小为全屏 375*667(4.7吋屏幕)
scrollView.frame = self.view.bounds;
[self.view addSubview:scrollView];
// 创建imageview对象,并且初始化的时候指定大小为图片的大小
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ab179aaejw1f44f5h8np9j23402c0kjl"]];
[scrollView addSubview:imageView];
// 设置可滚动范围为图片的大小
scrollView.contentSize = imageView.image.size;
// 设置界面刚显示出的时候,图片自带偏移
scrollView.contentOffset = CGPointMake(0, -64);
// 设置top留白64
scrollView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);
}
@end
由代码可知,ScrollView的大小与屏幕相等,为375*667
- 下图中:UIImageView上图片的大小690*518
- ScrollView没有滑动前的数据
- Bounds: X:0 Y:-64 W:375 H:667
- Position: X: 187.5 Y:333.5
- UIImageView没有滑动前的数据
- Bounds: X:0 Y:0 W:690 H:518
- Position: X: 345 Y:259
- ScrollView向左滑动后的数据
- Bounds: X:77 Y:-64 W:375 H:667
- Position: X: 187.5 Y:333.5
- UIImageView向左滑动后的数据
- Bounds: X:0 Y:0 W:690 H:518
- Position: X: 345 Y:259
滑动总结:
- 利用视图层次结构观察滚动后的 scrollView 和 imageView 的 position(center) 和 bounds 的变化
- 对比滑动前后的数据,只有ScrollView的bounds中的x发生了改变
- 滚动过程中 scrollView 本身的 frame 并没有发生变化
- 滚动过程中 imageView 本身的 frame 也没有发生变化
- 滚动过程中 scrollView 的 bounds 的 (x, y) 发生了变化
so.经过多次的验证,滑动只会改变ScrollView的bounds
既通过改变ScrollView自身的原点来改变子控件的位置
注:bounds我们通常用于修改大小,如果修改了x,y对自身不会发生什么影响
只会影响子物体所参照的父对象原点,默认原点是自身的左上角,修改bounds的x,y后自身原点会发生位移,x,y都大于0的时候,向左上角方向移动,与frame恰好相反