iOS中的常用UI控件(一):ScrollView

本文从最基础的scrollView控件写起,不断补充,直到非常复杂的实战演练。

一、scrollView基础

  1. 什么是UIScrollView?
    一个UI控件滚动, 缩放

  2. UIScrollView为什么要滚动? 滚动到哪里?
    一个屏幕的范围内显示不全内容
    内容最后结束的地方

  3. 什么在滚动?
    scrollView的内容(scrollView的子view——contentView)在滚动
    这里入一张图来说明:


    iOS中的常用UI控件(一):ScrollView_第1张图片
  • 滚动的时候是内容在滚动
    • contentOffset是偏移量-->是框框(也就是scrollView的左上角原点的坐标)相对于内容(contentView的左上角原点)进行偏移。
    • 当contentView的左上角原点和框框的原点重合时,偏移量为(0,0)
    • 所以手指往下拖拽,偏移量y减小,contenView往下滚动,在框框中会慢慢往上显示内容
    • 手指往左拖拽,偏移量x增大,conrentView往左移动,在框框中会慢 慢往右显示内容。
      (这个偏移量可真是绕。。。。。。)
      总之偏移量跟手势是相反的。往下y减少,往左x增大。(原来正常的应该是往下y增大,往左x减少)

其实还有一个属性:bounds 的x,y 其实就等于偏移量的x,y(因为都是框框的左上角原点相对于内容的左上角原点的坐标)

  • 怎么添加scrollView?
    1. 实例化一个scrollView
    2. 向scrollView中添加子view
    3. 设置contentSize属性
  1. UIScrollView常用属性
    滚动范围: contentSize --> 要比scrollView的size大
    内边距: contentInset --> (滚动到边界的时候)imageView的边框距离scrollView边框的一个距离
    偏移量: contentOffset --> 滚动到某一个位置(点)
    弹簧效果: bounces --> 一般不关闭
    总有弹簧效果 : 即使不设置 contentSize 也可以有弹簧效果 , 前提是:
bounces = YES
alwaysBounceVertical
alwaysBounceHorizontal

隐藏滚动指示器:

_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.showsVerticalScrollIndicator = NO;

设置是否可滚动:

scrollEnabled = YES;
  1. ScrollView的size和contentSize的区别?
    contentSize : 内容的滚动范围
    scrollView.size : 本身的宽高

  2. 手动修改offset
    修改offset的时候有动画效果
    [_scrollView setContentOffset: animated:];

无法滚动的原因

  1. contentSize小于scrollView的size

  2. userInteractionEnabled = NO

  3. _scrollView.scrollEnabled = NO; // 默认开启

  4. 监听scrollView的滚动
    什么情况下会使用代理:
    自己不能做
    自己不适合来做

  5. 制定协议以及代理方法

  6. 定义一个代理属性

  7. 遵守协议

  8. 实现对应的代理方法

  9. 制定协议者在适当的时候调用代理方法

scrollView代理的使用:

  1. 遵守协议

  2. 设置成为代理

  3. 实现对应的方法

  4. 缩放实现

/**
 minimumZoomScale;   --> 最小的缩小倍数
 maximumZoomScale;  --> 最大的放大倍数
*/

_scrollView.minimumZoomScale = 0.3;
_scrollView.maximumZoomScale = 3;

// 实现代理方法, 告诉scrollView是那个view要进行缩放
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

二、scrollView实战

1. 轮播图
  • 图片轮播器的pageControll
pageControll 主要属性:
   numberOfPages
   currentPage  0 .. numberOfPages - 1

   设置非当前指示器的颜色
   pageIndicatorTintColor

   设置当前指示器颜色
   currentPageIndicatorTintColor
  • 自动播放

必要的定时器

/**
 scheduled 计划,安排
 interval : 间隔
 target :  一般指控制器
 selector: 方法
 userInfo : 用户自定义的参数
 repeats: 重复

 每隔1秒钟 调用 控制器的  didClickButton: 方法, 传递的参数为nil

 一旦创建就会立即生效

 在使用timer的时候, 如果调用了 invalidate方法, 那么这个计时器就不 会再次生效
 重新创建新的timer
 */
_timer = [NSTimer scheduledTimerWithTimeInterval:1
                                         target:self
                                       selector:@selector(didClickButton:)
                                       userInfo:nil
                                        repeats:YES];

[_time fire]; 立即执行, 不会等待 interval设置的时间

使用delegate:
   修饰符必须使用weak, 防止循环引用

如果两个对象相互引用,其中必须有一个是 weak

pageEnabled = YES;
2. scrollView的自动布局
  1. masonry 纯代码布局
    注意点:
  • 给scrollView布局的时候,一定要保证添加到scrollView里的subview的宽高是可以确定的值。这样,scrollView的contentView才会根据subView的情况自动计算出来。


    iOS中的常用UI控件(一):ScrollView_第2张图片
  1. 用storyboard给scrollView布局
    参考链接:http://www.cocoachina.com/ios/20150104/10810.html
    有非常详细的介绍。
    步骤:
  2. 上下左右添加约束
  3. 指定某个方向滚动时,添加一个中心点的约束


  4. 指定contentSize 的高度或者宽度。
  5. 如果需要修改,拉一根布局的线到控制器中。

你可能感兴趣的:(iOS中的常用UI控件(一):ScrollView)