UIScrollView简介

来源:互联网 发布:win10上安装mac虚拟机 编辑:程序博客网 时间:2024/06/05 02:50


管理显示内容:

1.以动画的形式设置内容偏移量(使UIScrollView移动到指定位置):

- (void)setContentOffset:(CGPoint)contentOffset                animated:(BOOL)animated
调用这个函数,动画不会导致滚动指示条显示,它仅仅是滑动到指定位置。

2.内容偏移量:

@property(nonatomic) CGPoint contentOffset
内容的定位点(CGPoint)位于滚动视图的左上角,如果按照之前所建议的那样。假设内容是一个整个长方形,它的左上角是它的{0,0}点,这个数字就会起作用了。可以通过这个属性知道当前滚动位置,并可通过设置它来改变当前滚动位置。这里有一个非常明显的暗示,即,也可以通过改变滚动视图的边界原点来进行滚动;你将不太可能这么做,但事实是边界原点及contentOffset其实是一个东西。(默认值是CGPointZero)


3.设置滚动视图的内容大小:

@property(nonatomic) CGSize contentSize
尺寸的单位为点。默认值是CGSizeZero。


4.指定内容四周的余量(上 左 下 右的顺序):


@property(nonatomic) UIEdgeInsets contentInset
<span class="k" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 13, 145); font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">typedef</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><span class="k" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(170, 13, 145); font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">struct</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">{</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><a target=_blank href="https://developer.apple.com/library/ios/documentation/GraphicsImaging/Reference/CGGeometry/index.html#//apple_ref/doc/c_ref/CGFloat" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(0, 136, 204); text-decoration: none; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);"><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); background: transparent;">CGFloat</span> </a><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"></span><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">top</span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">,</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><a target=_blank href="https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVVideoCompositionRenderContext_Class/index.html#//apple_ref/doc/c_ref/left" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(0, 136, 204); text-decoration: none; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);"><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); background: transparent;">left</span> </a><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"></span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">,</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">bottom</span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">,</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><a target=_blank href="https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVVideoCompositionRenderContext_Class/index.html#//apple_ref/doc/c_ref/right" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(0, 136, 204); text-decoration: none; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);"><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); background: transparent;">right</span> </a><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"></span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">;</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">}</span><span style="color: rgb(128, 128, 128); font-family: Menlo, monospace; font-size: 12px; line-height: 20.299999237060547px; background-color: rgb(249, 249, 249);"> </span><span class="n" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(111, 65, 167); font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">UIEdgeInsets</span><span class="p" style="border: 0px; font-size: 12px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; font-family: Menlo, monospace; line-height: 20.299999237060547px; background: rgb(249, 249, 249);">;</span>
contentInset增加你在contentSize中指定的内容能够滚动的上下左右区域数量。用一个UIEdgeInsets结构体(4个CGFloat,按上、左、下、右的顺序),指定了内容四周的余量。这个常见的应用是当滚动视图在某个界面元素下面时,如半透明的状态栏、导航栏或工具栏、同时你希望内容即使滚动到底也可以看得见。


管理滚动:

5.是否启用滚动:

@property(nonatomic, getter=isScrollEnabled) BOOL scrollEnabled
默认值为YES。如果是NO,则用户不可滚动,滚动视图不接收触摸事件(但是在代码中仍然可以滚动)。可以用UIScrollView来完成各种各样有创意的点子,而不仅仅是让用户进行滚动;例如,用代码滚动至不同的内容区域,也许是一个界面替代另一个的一种方式,可能还带有动画。


6.决定在一个方向上是否禁用滚动:

@property(nonatomic, getter=isDirectionalLockEnabled) BOOL directionalLockEnabled
默认是 NO,可以在垂直和水平方向同时运动。当值是 YES 时,假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动。 假如一开始是对角方向滚动,则不会禁止某个方向。

7.控制是否可滚动到顶部:

@property(nonatomic) BOOL scrollsToTop
默认为YES,用户可以单击状态栏滚动至顶部。


8.调节内容,使得视图指定的CGRect在滚动视图的边界范围内:

- (void)scrollRectToVisible:(CGRect)rect                   animated:(BOOL)animated
该方法使定义的矩形区域在滚动视图中显示。如果区域已经是可见的方法不做任何事


9.是否启用滚动视图的分页:

@property(nonatomic, getter=isPagingEnabled) BOOL pagingEnabled
此属性默认是NO,如果设为YES,滚动视图不允许用户自由的滑动;相反,内容被认为有滚动视图的边界大小的部分组成,同时用户只能通过滑动移动至相邻的部分。

例如,Apple公司的一个示例有一个包含图片视图的滚动视图。每个图片视图就是滚动视图的尺寸。这是对pagingEnabled的一个恰当使用;用户可以滚动视图,查看下一副完整图片或上一幅完整图片。


10.就是滚动超过边界会反弹有反弹回来的效果:

@property(nonatomic) BOOL bounces
默认是 yes,就是滚动超过边界会反弹有反弹回来的效果。假如是 NO,那么滚动到达边界会立刻停止。


11.控制垂直方向遇到边框是否反弹(默认是NO):

@property(nonatomic) BOOL alwaysBounceVertical

12.控制水平方向遇到边框是否反弹(默认是NO):

@property(nonatomic) BOOL alwaysBounceHorizontal


alwaysBounceVerticalalwaysBounceHorizontal设成是YES,并且假设bounces也是YES,那么及时给足维度中的contentSize比滚动视图小(这样在那个维度上实际上不可进行滚动),然而用户仍然可以滚动,然后当用户仍然可以滚动,然后当用户方开始内容将迅速弹回原位;否则,用户的感觉就像在那个维度上不能滚动一样。


13.重载决定自己是否接收 touch 事件:

- (BOOL)touchesShouldBegin:(NSSet *)touches                 withEvent:(UIEvent *)event             inContentView:(UIView *)view
父视图是否可以将消息传递给子视图,yes是将事件传递给子视图,则不滚动,no是不传递则继续滚动


14.开始发送 tracking messages 消息给 subview 的时候调用这个方法:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
开始发送 tracking messages 消息给 subview 的时候调用这个方法,决定是否发送 tracking messages 消息到subview。假如返回 NO,发送。YES 则不发送。
假如 canCancelContentTouches属性是NO,则不调用这个方法来影响如何处理滚动手势。


15.控制触摸:

@property(nonatomic) BOOL canCancelContentTouches
当手指触摸屏幕后,并没有开始拖动,而隔一段时间后再开始拖动,这个属性决定是否scorllView里的图片是否会再继续随着手指的滑动,而图片跟着滑动。默认值是NO,图片会跟着手指滑动而滑动。

当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent: 到subview,然后scroView开始滚动,假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动。

假如你设置canCancelContentTouches为YES,那么当你在UIScrollView上面放置任何子视图的时候,当你 在子视图上移动手指的时候,UIScrollView会给子视图发送touchCancel的消息。而如果该属性设置为NO,ScrollView本身不 处理这个消息,全部交给子视图处理。


16.是否延时调用开始滚动的方法:

@property(nonatomic) BOOL delaysContentTouches
是个布尔值,当值是 YES 的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉 touch-down 事件,否则就不捕捉。假如值是NO,当用户触碰, scroll view 会立即触发 touchesShouldBegin:withEvent:inContentView:,默认是 YES。

当值是 YES的时候,用户触碰开始.要延迟一会,看看是否用户有意图滚动。假如滚动了,那么捕捉 touch-down事件,否则就不捕捉。假如值是NO,当用户触碰, scroll view会立即触发。


17.改变scrollerView的减速点位置:

@property(nonatomic) CGFloat decelerationRate

设置手指放开后的减速率。在轻弹屏幕后,滚动的速度逐渐衰减,较低的值衰减越快。它的值域是(0.0,1.0),当decelerationRate设置为0.1时,当手指touch up时就会很慢的停下来。


18.是否开始滚动:

@property(nonatomic, readonly, getter=isDragging) BOOL dragging

19.监控当前目标是否正在被跟踪:

@property(nonatomic, readonly, getter=isTracking) BOOL tracking
当 touch 后还没有拖动的时候值是YES,否则NO。用户触摸到滚动视图,但滚动视图还没有确定这是滚动还是其他类型的轻拍,可以使用这个。


20.监控当前目标是否正在减速:

@property(nonatomic, readonly, getter=isDecelerating) BOOL decelerating
当滚动后,手指放开但是还在继续滚动中。这个时候是 YES,其它时候是 NO。



管理Scroll指示器:

21.绘制滚动指示条的风格(Style):

@property(nonatomic) UIScrollViewIndicatorStyle indicatorStyle
typedef enum : NSInteger  {   UIScrollViewIndicatorStyleDefault ,//黑色白边   UIScrollViewIndicatorStyleBlack ,//黑色   UIScrollViewIndicatorStyleWhite //白色} UIScrollViewIndicatorStyle;

22.指定了滚动指示条在位置的切换:

@property(nonatomic) UIEdgeInsets scrollIndicatorInsets
一个UIEdgeInsets结构体,指定了滚动指示条在位置的切换,默认值是UIEdgeInsetsZero。典型的应用是抵消contentInset。例如,回到在半透明状态栏下的滚动视图,当滚动到顶部时,内容不再被状态栏遮拦,但垂直滚动指示条的顶部会被状态栏所遮拦。可以通过设置scrollIndicatorInsets的值与contentInset一样来解决这个问题。

小诀窍:通过设置scrollIndicatorInsets分量为某个负数,然后设置滚动视图的clipsToBounds值为NO,这样可以使得滚动指示条在滚动视图之外显示。但是由于你已经关掉了clipsToBounds,你可能必须在界面的顶部显示某些不透明视图以遮住滚动视图的边缘,这样使得边界之外的内容不见。


23.是否显示水平滚动条:

@property(nonatomic) BOOL showsHorizontalScrollIndicator
默认值是YES。


24.是否显示垂直滚动条:

@property(nonatomic) BOOL showsVerticalScrollIndicator
默认值是YES。

25.闪一下(显示)滚动条:

- (void)flashScrollIndicators


缩放和平移:

26.拖移手势:

@property(nonatomic, readonly) UIPanGestureRecognizer *panGestureRecognizer

27.二指手势:

@property(nonatomic, readonly) UIPinchGestureRecognizer *pinchGestureRecognizer

28.根据给定矩形的内容缩放,尽可能占据滚动视图的边界:

- (void)zoomToRect:(CGRect)rect          animated:(BOOL)animated
contentOffset自动调节以保持内容占据整个滚动视图。把从scrollView里截取的矩形区域缩放到整个scrollView当前可视的frame里面。所以如果截取的区域大于scrollView的frame时,图片缩小,如果截取区域小于frame,会看到图片放大。一般情况下rect需要自己计算出来。

29.设置缩放比例:

@property(nonatomic) CGFloat zoomScale
默认值是1.0。


30.根据比例值缩放:

- (void)setZoomScale:(CGFloat)scale            animated:(BOOL)animated
contentOffset自动调节以保持居中,同时内容占据整个滚动视图。


31.最大缩放比例:

@property(nonatomic) CGFloat maximumZoomScale
默认值是1.0。


32.最小缩放比例:

@property(nonatomic) CGFloat minimumZoomScale
默认值是1.0。


33.滚动视图从超过最大或最小界限的缩放自动返回,判断是否在缩放反弹:

@property(nonatomic, readonly, getter=isZoomBouncing) BOOL zoomBouncing
当滚动视图在这种状态下时,你将仅仅收到一条scrollViewDidZoom:消息。


34.判断视图是否正在缩放:

@property(nonatomic, readonly, getter=isZooming) BOOL zooming

35.控制缩放的时候是否会反弹:

@property(nonatomic) BOOL bouncesZoom


管理键盘:

36.滚动视图时键盘消失:

@property(nonatomic) UIScrollViewKeyboardDismissMode keyboardDismissMode
typedef enum : NSInteger  {   UIScrollViewKeyboardDismissModeNone ,   UIScrollViewKeyboardDismissModeOnDrag ,   UIScrollViewKeyboardDismissModeInteractive }UIScrollViewKeyboardDismissMode;


代理UIScrollViewDelegate

相应滚动和拖动:

1.滚动了就会触发:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
如果以代码进行滚动并且没有动画,你将立刻收到条消息。如果用户拖动或轻击,或采用了返回顶部的特性,或你在代码中用动画滚动,你将在整个滚动过程中重复收到这条消息,包括在用户的手指离开界面后,滚动视图在减速的过程。在这些情况下,还有一些其他的委托消息可以告诉你滚动在什么时候真正结束。


2.开始拖拽视图:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

3.将要结束滑动,手指已拖动过view并准备离开手指的那一刻:

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView                     withVelocity:(CGPoint)velocity              targetContentOffset:(inout CGPoint *)targetContentOffset
注意:当属性pagingEnabled为YES时,此函数不被调用。


4.完成拖拽:

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

5.当用户点触iPhone的状态条时滚动视图代理可以决定视图是否应滚定回到开头:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它


6.滑动到顶部的时候调用:

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView

7.开始减速时调用:

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

8.减速停止了时执行,手触摸时执行执行:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView


管理缩放:

9.返回一个放大或缩小的视图:

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView

10.开始放大或者缩小:

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView                          withView:(UIView *)view

11.完成放大缩小时调用:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView                       withView:(UIView *)view                        atScale:(CGFloat)scale

12.视图已经放大或缩小:

- (void)scrollViewDidZoom:(UIScrollView *)scrollView


相应滚动动画:

13.滚动动画停止时执行,代码改变时出发,也就是setContentOffset改变时调用:

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView




0 0
原创粉丝点击