UIScrollView常用属性/常用代理方法总结

一、UIScrollView简介
UIScrollView主要用于对其中的子控件(UIImageView/UIView等)进行缩放,给UIScrollView控件中的子控件添加子控件并设置约束的时候,除了给子控件设置x、y、width、height约束外,还应设置子控件距离scrollView顶部底部的约束(目的是为了告诉scrollView其contentSize是多少),这样才能保证约束不报错

二、scrollView的重要属性

  • contentSize:用来控制scrollView中能够滚动的范围,属性类型:CGSize
  • contentOffSet:用来标定scrollView中内容的左上角相对于scrollView左上角的位置,属性类型:CGPoint
    x为正向增大代表内容是向scrollView的左边滚动
    y为正向增大代表内容是向scrollView的上方滚动
    作用是用来确定在加载程序时,内容相对于scrollView的初始位置
    另外,通过改变scrollView的contentOffset属性,可以改变scrollView显示的内容

  • contentInset:相当于scrollVIew内容的额外增加的边距,值为正的时候代表边距向外扩展,不影响内容的实际大小,只是增加了一圈的滚动范围 CGRect 类型。按钮的inset是向内缩

contentOffset的内容左上角不包括此增加的边距
对于contentInset可以用此方法进行设值
self.scrollView.contentInset = UIEdgeInsetsMake(20, 50, 80, 100);

  • scrollView的其他属性

@property(nonatomic) BOOL bounces;
设置UIScrollView是否需要弹簧效果

@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
设置UIScrollView是否能滚动

@property(nonatomic) BOOL showsHorizontalScrollIndicator;
是否显示水平滚动条

@property(nonatomic) BOOL showsVerticalScrollIndicator;
是否显示垂直滚动条

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets
UIViewController的属性,但是与scrollView相关,设置scrollView是否自动调整contentInsets

  • 将controllerView设置为scrollView的代理,可以实现监听scrollview内容滚动和缩放的事件,即在内容发生滚动和缩放时controllerView会自动调用相关的方法。其中要想实现内容的缩放必须设置controllerView为代理

三、要想让controllerView成为scrollView的代理,必须有以下三个步骤:

  • controllerView遵守scrollView的协议;
  • 在viewDidLoad函数中设置scrollView的代理为self,即代理为controllerView
  • 实现协议中的方法

四、scrollView内容滚动

要想让scrollView中的内容能够滚动,必须设置contentSize,且contentSize的值必须大于scrollView的frame,某个方向不想让其滚动,那就设置为0;
对于滚动时,可实现的方法为
- (void)scrollViewWillBeginDragging:(UIScrollView*)scrollView;
用户开始拖拽时自动调用的方法,一次拖拽只会调用一次

  • (void)scrollViewDidScroll:(UIScrollView *)scrollView;
    内容正在滚动时调用的方法

  • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    (decelerate表示用户停止拖拽时内容是否降速了,如果有降速,decelerate为YES,如果没有降速,decelerate为NO);
    用户停止拖拽时调用的方法,用户停止拖拽了,可能内容由于惯性还会继续移动,所以还会继续调用(scrollViewDidScroll:)方法

UIScrollView无法滚动可能的原因及解决办法

  • 没有设置contentSize
  • scrollEnabled = NO
  • 没有接收到触摸事件:userInteractionEnabled = NO
  • 没有取消autolayout功能(要想scrollView滚动,在XCode5.x以下必须取消Autolayout,在XCode6以上不需要)

UIScrollView的frame.size与contentSize的区别:

  • frame.size指的是: UIScrollView的可视区域的大小, UIScrollView本身的大小
  • contentSize指的是: UIScrollView中所包含的内容的大小(要滚动的实际内容的大小)

如果contentSize <= frame.size ,则scrollView无法滚动

scrollView内容缩放

  • 首先必须设置scrollView的缩放比例,最大值和最小值

self.scrollView.maximumZoomScale
self.scrollView.minimumZoomScale

实现scrollView中的相关方法,以实现controllerView对scrollView中内容缩放的监听,代理设置过程与scrollView内容滚动时相同。

  • 对于缩放过程,调用的相关方法为:

  • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView
    以上方法非常重要,目的是为了告诉scrollView要对哪个控件进行缩放,返回值就是返回要缩放的控件,而且必须使用代理,同一时间只能对一个控件进行缩放

此方法会动态的改变scrollView的contentSize,因此无需再改变contentSize都可以实现内容的滚动

  • (void)scrollViewWillBeginZooming:(UIScrollView )scrollView withView:(UIView )view
    内容将要开始缩放时调用的方法,scrollView与属性中的scrollView是同一个
    view就是被缩放的控件

  • (void)scrollViewDidZoom:(UIScrollView *)scrollView
    内容正在进行缩放时调用的方法

  • (void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(CGFloat)scale
    内容停止缩放时调用的方法

scrollView的分页效果参照的是scrollView自身的width或者height,与所设置的内容大小没有关系

你可能感兴趣的:(iOS学习)