您的位置:首页 > 产品设计 > UI/UE

UIScrollView的滑动原理解析

2016-08-06 22:54 411 查看
顾名思义,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恰好相反
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: