博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UIScrollView的滑动原理解析
阅读量:4088 次
发布时间:2019-05-25

本文共 1898 字,大约阅读时间需要 6 分钟。

  • 顾名思义,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

UIImageView上图片的大小680*518

  • ScrollView没有滑动前的数据
    • Bounds: X:0 Y:-64 W:375 H:667
    • Position: X: 187.5 Y:333.5

ScrollView没有滑动前的数据

  • UIImageView没有滑动前的数据
    • Bounds: X:0 Y:0 W:690 H:518
    • Position: X: 345 Y:259

UIImageView数据

  • ScrollView向左滑动后的数据
    • Bounds: X:77 Y:-64 W:375 H:667
    • Position: X: 187.5 Y:333.5

ScrollView滑动后的数据

  • UIImageView向左滑动后的数据
    • Bounds: X:0 Y:0 W:690 H:518
    • Position: X: 345 Y:259

UIImageView滑动后数据

滑动总结:

  • 利用视图层次结构观察滚动后的 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恰好相反

你可能感兴趣的文章
第七章作业2
查看>>
Zookeeper原理
查看>>
后端程序员之路 32、Index搜索引擎实现分析1-类的设计
查看>>
在DevExpress程序中使用内置的图标构建美观的界面元素【转】
查看>>
JAVA入门之数组
查看>>
spring注解方式注入
查看>>
增加CentOS最大打开文件数/文件描述符
查看>>
健身VS不健身,完全是两种不同的人生!
查看>>
【转发】centos 7安装完后出现please make your choice from '1' ......
查看>>
linux:jenkins的那点事
查看>>
大数据学习第8天
查看>>
unittest 单元测试
查看>>
随记(十)--'xxx' does not contain bitcode报错
查看>>
.net 服务器空间生命周期
查看>>
<aop:aspectj-autoproxy proxy-target-class="false|true"/>使用时的问题
查看>>
商品综合练习题
查看>>
day 45 Django 的初识2 路由层,视图层,模板层
查看>>
C/C++的编译过程
查看>>
mysql存储过程游标使用
查看>>
Java WebService接口生成和调用 图文详解>【转】【待调整】
查看>>