UIScrollView详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UIScrollView详解相关的知识,希望对你有一定的参考价值。

1.UIScrollView常用属性

  • contentSize属性--该属性表示滚动的内容的范围大小,是CGPoint类型的。

说明:

  1. 默认超出UIScrollView的可视区域的内容是不显示的。相当于有:xxx.clipsToBounds = YES;
  2. UIScrollView滚动的是它里面的内容,该控件对象它本身位置是不动的。
  3. 如果设置的contentSize的尺寸小于或等于UIScrollView对象的尺寸,那么表现是不可滚动的。

 


 

  • bounces属性--弹簧效果。

说明:

  1. 因为弹簧效果看到的是内容额外的区域,所以不属于UIScrollView的contentSize区域内容。
  2. 不管有没有设置内容大小contentSize,也可以添加弹簧效果;如:下拉刷新、上拉加载等

 


 

 

  •  alwaysBouncesHorizontal--是否总有水平方向上的弹簧效果
  • alwaysBouncesVertial--是否总有垂直方向上的弹簧效果

说明:

  1. 不管有没有设置内容大小contentSize,总是可以通过此属性来添加弹簧效果;如:下拉刷新、上拉加载等
  2. 该属性默认值为NO;

 


 

  • showsHorizonalScrollIndicator--是否让水平滚动条显示,默认值YES
  • showsVertialScrollIndicator--是否让垂直方向滚动条显示,默认值YES

注意:

  1. 用storyboard常见UIScrollView对象时,这两个滚动条一直在该UIScrollView对象的子控件数组中,且索引值不确定;
  2. 用代码创建UIScrollView对象时,不管有没有设置contentSize属性,这两个滚动条总不在该UIScrollView对象的子控件数组中。

 


 

 

  •  contentOffset----可设置和获取内容当前的位置

说明:contentOffset此属性的值为:scrollView的左上角的坐标减去内容的左上角的位置,不管有没有给contentInset属性设置,该值得算法总是如此。

  •  contentInset----给内容添加额外的显示区域。如歌词页面中,一般从页面中间开始显示歌词。

 


 

2.UIScrollView常见的代理属性

说明:

  1. 首先要遵守UIScrollViewDelegate协议,实现其中的必须实现的方法,然后赋值成为UIScrollView对象的代理即可。
  2. UIScrollViewDelegate协议中的方法,只需实现后放在就行。系统会自动调用,而不用手动调用。
  3. 实现代理方法时,只需知道这些方法是干什么的、什么时候调用即可。
  • - (void)scrollViewDidScroll:(UIScrollView *)scrollView;                                              

注:any offset changes。一旦监听到offset值变化,就调用此方法。说白了就是,在滚动着的时候调用此方法;


  • - (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_ios(3_2); // any zoom scale changes

注:called on start of dragging (may require some time and or distance to move)


 

  • - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

注:called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest。

当用户用手指将要开始拖拽scrollView时就调用此方法。


 

  • - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0);

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards

当用户拖拽过程中,手指突然抬起,将要结束拖拽scrollView的时候调用此方法。


 

  • - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

 当用户已停止拖拽scrollView的时候,调用此方法。


 

  • - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;   // called on finger up as we are moving

当scrollView将要开始减速的时候,调用此方法。


  • - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      // called when scroll view grinds to a halt

当scrollView减速到0,即停止时调用次方发。


 

  • - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating

 

  • - (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;     // return a view that will be scaled. if delegate returns nil, nothing happens

  • - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content

  • - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale; // scale between minimum and maximum. called after any ‘bounce‘ animations

 

  • - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;   // return a yes if you want to scroll to the top. if not defined, assumes YES

  • - (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;      // called when scrolling animation finished. may be called immediately if already at top

 

 

 

 

 

 

 

以上是关于UIScrollView详解的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UIScrollView 启用方向锁定?

动态检测 UIScrollView 的高度

带有 ImageView 的 UIScrollView 不垂直滚动

如何阻止 UIScrollView 吞下触摸

UIScrollVIew 中的静态对象

UIScrollview 无法识别从屏幕边缘滑动