iOS组件之UIScrollView详解

引言

UIScrollView控制继承于UIView(有关UIView的介绍请到《iOS组件之UIView详解》),该UIScrollView的类提供了用于显示的内容比应用程序的窗口的大小支持。它使用户能够通过使刷卡手势内容中滚动,并从内容部分通过使捏的手势和背部放大。

UIScrollView的是几个UIKit类包括的UITableView和UITextView中的超类。

一个UIScrollView对象(或者,简单地说,一个滚动视图)的核心概念是,它是一个视图,其起源是可调过的内容视图。它剪辑的内容,它的框架,这通常(但不一定)恰逢该应用程序的主窗口。滚动视图跟踪手指的变动,并相应调整原点。这正显示出它的内容“,通过”滚动视图的视图绘制的基础上,新的原点,它被固定在内容视图的偏移部分本身。滚动视图本身没有绘制,除了显示垂直和水平滚动的指标。滚动视图必须知道的内容视图的大小,所以它知道何时停止滚动,默认情况下,它“反弹”回来时,滚动超出了内容的范围。

用于管理内容的绘制有关的对象显示在一个滚动视图应该瓦片的内容的子视图,以便没有视图超过屏幕的大小。当用户在滚动滚动视图,这个对象应该添加和删除子视图是必要的。

由于滚动视图没有滚动条,它必须知道是否触摸信号的意图与滚动意图在内容跟踪一个子视图。做出此决定,它暂时拦截触摸按下事件通过启动一个定时器,并在定时器触发之前,看是否触摸手指做任何运动。如果定时器触发无位置显著的变化,滚动视图将跟踪事件的内容视图的感动子视图。然后,如果用户在定时器期满前拉着自己的手指远远不够,滚动视图将取消任何跟踪的子视图,并进行滚动本身。子类可以重写touchesShouldBegin : withEvent:方法inContentView :,pagingEnabled和touchesShouldCancelInContentView :方法(这是由滚动视图调用)来影响滚动视图如何处理滚动手势。

滚动视图还处理缩放和平移的内容。当用户使一个夹在或向外挤压手势,滚动视图调整偏移量和内容的标度。当手势结束,管理内容视图中的对象应该要更新的内容为必要的子视图。 (请注意,手势可以结束和手指仍可能下跌。 )虽然手势正在进行中,滚动视图不发送任何跟踪调用子视图。

该UIScrollView的类可以有必须采取UIScrollViewDelegate协议的委托。对于缩放和平移工作,委托必须实现viewForZoomingInScrollView :和scrollViewDidEndZooming : withView : atScale : ,此外,最大( maximumZoomScale )和最小( minimumZoomScale )变焦倍数必须是不同的。

目录

// 监控目前滚动的位置(默认CGPointZero)

CGPoint                      contentOffset; 
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;

// 滚动范围的大小(默认CGSizeZero)

CGSize                       contentSize; 

// 视图在scrollView中的位置(UIEdgeInsetsZero)

UIEdgeInsets                 contentInset;                   

// 设置协议

id<UIScrollViewDelegate>      delegate;                       

// 指定控件是否只能在一个方向上滚动(默认为NO)

BOOL directionalLockEnabled;         

// 控制控件遇到边框是否反弹(默认为YES)

BOOL                         bounces;                        

// 控制垂直方向遇到边框是否反弹(默认为NO,如果为YES,bounces也是YES)

BOOL                         alwaysBounceVertical;           

// 控制水平方向遇到边框是否反弹(默认为NO,如果为YES,bounces也是YES)

BOOL                         alwaysBounceHorizontal;         

// 控制控件是否整页翻动(默认为NO)

BOOL          pagingEnabled;                  

// 控制控件是否能滚动

BOOL          scrollEnabled;                  

// 控制是否显示水平方向的滚动条

BOOL                         showsHorizontalScrollIndicator; 

// 控制是否显示垂直方向的滚动条

BOOL                         showsVerticalScrollIndicator;   

// 指定滚动条在scrollerView中的位置

UIEdgeInsets                 scrollIndicatorInsets;          

// 设定滚动条的样式

UIScrollViewIndicatorStyle   indicatorStyle;                 

// 改变scrollerView的减速点位置

CGFloat                      decelerationRate;

// UITableView 在EnablePage状态下滚动到指定的页面上

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;

// 这个很有用,闪一下滚动条,暗示是否有可滚动的内容。可以在ViewDidAppear或[table reload]之后调用。

- (void)flashScrollIndicators; 

// 监控当前目标是否正在被跟踪(只读)

BOOL tracking;

// 监控当前目标是否正在被拖拽(只读)

BOOL dragging;

// 监控当前目标是否正在减速(只读)

BOOL decelerating;    

// 控制视图是否延时调用开始滚动的方法

BOOL delaysContentTouches;       

// 控制控件是否接触取消touch的事件

BOOL canCancelContentTouches;

//返回yes 是不滚动 scroll 返回no 是滚动scroll

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view;

//NO scroll不可以滚动 YES scroll可以滚动

- (BOOL)touchesShouldCancelInContentView:(UIView *)view;

// 缩小的最小比例

CGFloat minimumZoomScale;     

// 放大的最大比例

CGFloat maximumZoomScale;     

// 设置变化比例

CGFloat zoomScale;  
- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated;

// 设置变化范围

- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated;

// 控制缩放的时候是否会反弹

BOOL  bouncesZoom;

// 判断控件的大小是否正在改变(只读)

BOOL zooming;

// 判断是否正在进行缩放反弹(只读)

BOOL zoomBouncing;

// 控制控件滚动到顶部

BOOL  scrollsToTop;

// Use these accessors to configure the scroll view’s built-in gesture recognizers. // Do not change the gestures’ delegates or override the getters for these properties. // 只读

UIPanGestureRecognizer *panGestureRecognizer NS_AVAILABLE_IOS(5_0);

// pinchGestureRecognizer will return nil when zooming is disabled. // 只读

UIPinchGestureRecognizer *pinchGestureRecognizer NS_AVAILABLE_IOS(5_0);

UIScrollViewKeyboardDismissMode keyboardDismissMode NS_AVAILABLE_IOS(7_0); // default is UIScrollViewKeyboardDismissModeNone

@end

UIScrollViewDelegate协议(可选)

//只要滚动了就会触发

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

// 当scrollview发生缩放的时相应

- (void)scrollViewDidZoom:(UIScrollView *)scrollView;

// 将要拖拽视图

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

// 开始拖拽视图

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;

// 完成拖拽

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

// 将开始降速时

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;   

// 减速停止了时执行

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;      

// 滚动动画停止时执行,代码改变时出发,也就是setContentOffset改变时

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; 

// 设置放大缩小的视图,要是uiscrollview的subview

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

// 当scrollview将要发生缩放的时相应

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

// 完成放大缩小时调用

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

// //如果你不是完全滚动到滚轴视图的顶部,你可以轻点状态栏,那个可视的滚轴视图会一直滚动到顶部,那是默认行为,你可以通过该方法返回NO来关闭它 。点击状态栏,scroll view回到顶部,如果想实现这个,实现代理方法scrollViewShouldScrollToTop返回YES,当完成时,给代理发送scrollViewDidScrollToTop: 消息

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;   
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;





Comments