1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. // Do any additional setup after loading the view, typically from a nib.
  4. UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:kScreenBounds];
  5. scrollView.backgroundColor = [UIColor yellowColor];
  6. [self.view addSubview:scrollView];
  7. UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
  8. button.backgroundColor = [UIColor blueColor];
  9. button.frame = CGRectMake(, , kScreenWidth - , );
  10. [scrollView addSubview:button];
  11. // 1. 默认 CGSizeZero == CGSizeMake(0, 0)
  12. // contentSize 设置可以滚动的范围
  13. scrollView.contentSize = CGSizeMake(, );
  14. // 2. 默认 CGPointZero
  15. // contentOffset 偏移量, 滚动的位置
  16. // 不设置contentSize, contentOffset也可以改变
  17. // 问题: 改变contentOffset什么变了?
  18. // 答案: 改变contentOffset, 实质上是对scrollView的bounds进行了改变.(改变子视图的坐标)
  19. NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame));
  20. NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds));
  21. scrollView.contentOffset = CGPointMake(, );
  22. NSLog(@"scrollView frame is : %@", NSStringFromCGRect(scrollView.frame));
  23. NSLog(@"scrollView bounds is : %@", NSStringFromCGRect(scrollView.bounds));
  24. // 3. contentInset
  25. // 添加滚动区域四周的滚动范围
  26. // UIEdgeInsets age = {10, 10, 10, 10};
  27. scrollView.contentInset = UIEdgeInsetsMake(, , , );
  28. // 4. directionalLockEnabled
  29. // 锁定垂直或水平滚动(45度角, 锁会失效)
  30. scrollView.directionalLockEnabled = YES;
  31. // 5. bounces 回弹效果
  32. // 边缘弹动动画关闭 NO
  33. // scrollView.bounces = NO;
  34. // 6. alwaysBounceVertical 在没有垂直方向的滚动范围时(0), 保证垂直方向的回弹效果
  35. scrollView.alwaysBounceVertical = YES;
  36. // 7. alwaysBounceHorizontal 在没有水平方向的滚动范围时(0), 保证垂直方向的回弹效果
  37. scrollView.alwaysBounceHorizontal = YES;
  38. // 8. pagingEnabled 按页滚动
  39. scrollView.pagingEnabled = YES;
  40. // 9. scrollEnabled 滚动视图能否滚动, 默认为YES, NO(不可以滚)
  41. scrollView.scrollEnabled = YES;
  42. // 10. showsHorizontalScrollIndicator 是否显示水平滚动指示器
  43. scrollView.showsHorizontalScrollIndicator = YES;
  44. // 11. showsVerticalScrollIndicator 是否显示垂直滚动的指示器
  45. scrollView.showsVerticalScrollIndicator = YES;
  46. // 12. 滚动指示器的边距
  47. scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(, , , );
  48. // 13. indicatorStyle 滚动指示器的颜色(深色背景丶浅色背景)
  49. scrollView.indicatorStyle = UIScrollViewIndicatorStyleBlack;
  50. // 14.
  51. // scrollView.tracking 用户有没有开始拖动
  52. // scrollView.tracking
  53. // scrollView.dragging 用户是否正在拖动
  54. // scrollView.dragging
  55. // scrollView.decelerating 是否减速中
  56. // scrollView.decelerating
  57. // 14. scrollsToTop 滚动视图, 双击状态栏手势是否存在
  58. scrollView.scrollsToTop = NO;
  59. // 15. 代理
  60. scrollView.delegate = self;
  61. // 16. 键盘消失模式(一般用这个UIScrollViewKeyboardDismissModeOnDrag)
  62. scrollView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
  63. // 测试:
  64. UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(, , kScreenWidth - , )];
  65. textField.backgroundColor = [UIColor cyanColor];
  66. [scrollView addSubview:textField];
  67. // 17. 缩放系数
  68. // 如果想进行视图放大缩小, 必须实现viewForZoomingInScrollview:
  69. scrollView.minimumZoomScale = ;
  70. scrollView.maximumZoomScale = ;
  71. }
  72. // 与其想要缩放的子视图绑定, scrollView的contentSize会跟随这个子视图改变
  73. - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
  74. return scrollView.subviews.firstObject;
  75. }
  76. // 滚动视图滚动, 就会执行
  77. - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
  78. // tracking 用户触摸
  79. if (scrollView.tracking) {
  80. NSLog(@"正在拖动滚动");
  81. } else {
  82. NSLog(@"自己滚动中");
  83. }
  84. // dragging 用户开始滑动
  85. if (scrollView.dragging) {
  86. NSLog(@"");
  87. }
  88. // decelerating 用户触摸结束
  89. if (scrollView.decelerating) {
  90. NSLog(@"");
  91. }
  92. }
  93. // 将要开始拖拽
  94. - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
  95. // NSLog(@"开始拖拽");
  96. }
  97. // 将要结束拖拽
  98. - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
  99.  
  100. }
  101. // 将要开始进行减速
  102. - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
  103. // NSLog(@"开始减速");
  104. }
  105. // 已经结束减速
  106. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
  107. //NSLog(@"结束减速");
  108. }
  109. - (void)didReceiveMemoryWarning {
  110. [super didReceiveMemoryWarning];
  111. // Dispose of any resources that can be recreated.
  112. }

UIScrollView 几乎所有的属性和方法的更多相关文章

  1. PHP 面向对象编程和设计模式 (2/5) - 静态变量、属性和方法及延迟绑定

    PHP高级程序设计 学习笔记 2014.06.10 Static(静态)关键字用来定义静态方法和属性,static 也可用于定义静态变量以及后期静态绑定. 1.静态变量 static variable ...

  2. 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间

    [源码下载] 速战速决 (5) - PHP: 动态地创建属性和方法, 对象的复制, 对象的比较, 加载指定的文件, 自动加载类文件, 命名空间 作者:webabcd 介绍速战速决 之 PHP 动态地创 ...

  3. String类型的属性和方法

    × 目录 [1]属性 [2]对象通用方法 [3]访问字符方法[4]字符串拼接[5]创建子串方法[6]大小写转换[7]查找子串位置[8]正则匹配方法[9]去除首尾空格[10]字符串比较 前面的话 前面已 ...

  4. python 类属性与方法

    Python 类属性与方法 标签(空格分隔): Python Python的访问限制 Python支持面向对象,其对属性的权限控制通过属性名来实现,如果一个属性有双下划线开头(__),该属性就无法被外 ...

  5. Node.js process 模块常用属性和方法

    Node.js是常用的Javascript运行环境,本文和大家发分享的主要是Node.js中process 模块的常用属性和方法,希望通过本文的分享,对大家学习Node.js http://www.m ...

  6. UIKit的外观属性及方法汇总

    本文授权转载,作者:楚天舒(简书) 开发中经常会碰到要设置UI的某个生僻的外观属性,虽然在头文件中都能查到,但一是每个控件的头文件比较分散繁杂,二是每个头文件里有太多不用到的方法和属性,所以这里将UI ...

  7. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  8. [OC][转]UITableView属性及方法大全

    Tip: UITableView属性及方法大全  (摘录地址) p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 14.0px; font: 1 ...

  9. html5 audio的语法以及属性和方法

    使用语法<audio src="song.mp3" controls="controls" loop="loop" autoplay= ...

随机推荐

  1. 20165301 2017-2018-2 《Java程序设计》第四周学习总结

    20165301 2017-2018-2 <Java程序设计>第四周学习总结 教材学习内容总结 第五章:子类与继承 一个类只能有一个父类,但是可以有若干个子类. 子类的继承性 子类和父类在 ...

  2. SGU 204. Little Jumper

    204. Little Jumper time limit per test: 0.5 sec. memory limit per test: 65536 KB input: standard out ...

  3. python3环境下面bytes类型转换成字典类型实例

    场景:通过http://tool.chinaz.com/tools/httptest.aspx在线HTTP接口测试工具获取接口的返回信息 { "status": 0, " ...

  4. spring boot 笔记

    1.不能访问非启动类中的@RequestMapping 路径: 启动类注解 1.@Controller @EnableAutoConfiguration @ComponentScan 或 2.@Spr ...

  5. Codeforces Round #278 (Div. 1) D - Conveyor Belts 分块+dp

    D - Conveyor Belts 思路:分块dp, 对于修改将对应的块再dp一次. #include<bits/stdc++.h> #define LL long long #defi ...

  6. python爬虫实战(四)--------豆瓣网的模拟登录(模拟登录和验证码的处理----scrapy)

    在利用scrapy框架爬各种网站时,一定会碰到某些网站是需要登录才能获取信息. 这两天也在学习怎么去模拟登录,通过自己码的代码和借鉴别人的项目,调试成功豆瓣的模拟登录,顺便处理了怎么自动化的处理验证码 ...

  7. 深度学习基础系列(一)| 一文看懂用kersa构建模型的各层含义(掌握输出尺寸和可训练参数数量的计算方法)

    我们在学习成熟网络模型时,如VGG.Inception.Resnet等,往往面临的第一个问题便是这些模型的各层参数是如何设置的呢?另外,我们如果要设计自己的网路模型时,又该如何设置各层参数呢?如果模型 ...

  8. css加载方式link和@import的区别!

    本质上,这两种方式都是为了加载CSS文件,但还是存在着细微的差别. 1. 老祖宗的差别.link属于XHTML标签,而@import完全是CSS提供的一种方式. link标签除了可以加载CSS外,还可 ...

  9. 关联的CURD

    在保存的前面必须先建立好关联.但是默认情况下还是不会自动保存,如果保存会出错. Cascade all所有关联的所有持久化都是级联到另一个对象.保存这个对象的时候关联的对象自动保存. Cascade只 ...

  10. XamarinForms教程构建XamarinForms开发环境

    构建XamarinForms开发环境 所谓Xamarin.Forms的开发环境,就是指在基本硬件和数字软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SDE.对于任何的程 ...