如何让uiscrollview详解一直显示滚动条

UIScrollView 滚动视图 - pengyingh - 博客园
http://blog.csdn.net/iukey/article/details/7319314
UIScrollView 类负责所有基于 UIKit 的滚动操作。
CGRect bounds = [ [ UIScreen mainScreen ] applicationFrame ] ;
UIScrollView* scrollView = [ [UIScrollView alloc ] initWithFrame:bounds ];
当你创建完滚动视图后,你可以将另一个视图的内容粘合到滚动视图的空白页上。这回创建一个滚动的内容窗口:
[ scrollView addSubview:myView];
你必须给出内容的实际大小,这样滚动视图才知道滚动的范围:
scrollView.contentSize = myView.frame.
要开启缩放功能需要调整视图的两个属性,分别是maxinumZoomScale 和 mininumZoomScale 。这样就可以允许用户使用捏合手势调整内容大小:
scrollView.maxinumZoomScale = 2.0;//允许放大2倍
scrollView.mininumZoomScale = 0.5;//允许放大到0.5倍
要打开缩放功能,你还需要增加一个UIScrollViewDelegate 代理,通过一个名为 viewForZoomingScrollView
的方法做出响应。这个方法会返回进行缩放时所使用的 UIView 对象:
scrollView.delegate =
- (UIView*)viewForZoomingInScrollView:(UIScrollView*)scrollView{
  retutn myV
Tips:对于大规模数据,你可能会在最初使用一个低于实际大小(1.0)的缩放比例,让用户可以平滑地进行放大。
除了上面用到的缩放属性外,滚动视图还有会让你多其他属性,可以对现实内容的行为进行微调。你可以对 UIScrollView 类进行多方位定制。下面这些属性是最常用的。
1.indicatorStyle
指定你希望使用的滚动条指示器的类型。默认行为是在白边界上绘制黑色的滚动条,这在大多数背景下都适用。可用风格如下:
UIScrollViewIndicatorStyleDefault
UIScrollViewIndicatorStyleBlack
UIScrollViewIndicatorStyleWhite
2.contentOffset
一个CGPoint结构,其中包含有要显示内容相对于窗口左上角的偏移量。默认是从0&0开始的,但是你也可以将显示内容放在其他位置。
3.directionalLockEnabled
默认行为是允许用户同时进行横向和纵向的滚动。将这个属性设置为YES会导致将用户的滚动行为锁定成只允许横向或纵向进行,具体方向由初始姿态决定。
当用户抵达滚动区域边缘时,这个功能允许用户稍微拖动到边界外一点。当用户松开手指后,这个区域会像个橡皮筋一样,弹回到原位,给用户一个可见的提示,表示他已经到达了文档开始或结束位置。如果不想让用户的滚动范围能够超出可见内容,可以将这个属性设置为NO。
5.bouncesZoom
类似于bounces 选项,这个方法可以令用户的缩放操作超出最大或最小缩放级别,然后弹回到范围以内。如果你不想让用户能够超出你指定的范围进行缩放,将这个属性设置为NO。
6.pagingEnabled
当开启了分页功能时,滚动视图被分割成多个独立区段,二用户的滚动体验则变成了页面翻转,你可以用这个属性来进行页面翻转。
三、委托方法
可以赋予滚动视图一个委托,下列委托方法会在特定时刻收到通知。
-(void)scrollViewDidScroll:(UIScrollView*)scrollV//会在视图滚动时收到通知。包括一个指向被滚动视图的指针,从中可以读取contentOffset属性以确定其滚动到的位置。
-(void)scrollViewWillBeginDragging:(UISCrollView*)scrollV//当用户首次在某个方向上进行拖动时得到通知。这个方法会得到被作为参数传递的滚动视图指针,也同样可以从中读取 contentOffset 属性。
-(void)scrollViewDidEndDragging:(UIScrollView*)scrollView willDecelerate:(BOOL)
//当用户抬起拖动到手指时得到通知。还会得到一个布尔值,知名报告滚动视图最后位置之前,是否需要减速。
-(void)scrollViewWillBeginDecelerate:(UIScrollView*)scrollV//当用户抬起手指而视图需要继续移动时,会收到通知。这个方法可以用来读取 contentOffset属性,从而判断出当用户抬起手指前最后一次滚动到的位置,虽然这个位置并不会使滚动条的最终停止位置。
-(void)scrollViewDidEndDecelerating:(UIScrollView*)scrollV//当上面提到的减速完毕、滚动视图停止时得到通知。收到这个通知的时刻,滚动视图的contentOffset属性会反映出滚动条最终停止的位置。
-(void)scrollViewDidEndZooming:(UIScrollview*)scrollView withView:(UIView*)view atScale:(float)//当用户对内容进行缩放时,会收到通知。缩放比例表示为一个浮点值,会作为参数传递进来。
-(BOOL)scrollViewShouldScrollToTop:(UIScrollView*)scrollV
-(void)scrollViewDidScrollToTop:(UIScrollView*)scrollV
//当用户点出iPhone状态条时,滚动视图委托可以决定视图是否滚动回到开头。
OK,都总结完了,后面会写一个页面翻转的例子敬请关注。降低UIScrollView快速滑动后滚动的速度
UIScrollView 快速滑动过程中,滚动速度过快,可以通过属性decelerationRate控制。
decelerationRate范围为0-----1,一般0---0.5没有多少区别。0也没有问题。
当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking
events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent:
到subview,然后scroView开始滚动
假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动
contentSize&里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。
showsHorizontalScrollIndicator&滚动时,是否显示水平滚动条
showsVerticalScrollIndicator&滚动时,是否显示垂直滚动条
bounces &默认是yes,就是滚动超过边界,会反弹有反弹回来的效果,假如是
NO,那么滚动到达边界,那么会连忙停止
bouncesZoom
&和bounces类似,区别在于,这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果,假如是NO,则到达最大或者最小的时候,立即停止
directionalLockEnabled &默认是NO, 可以在垂直和水平方向同时运动,
当值是YES, 假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动,
假如一开始是对角方向滚动,则不会禁止某个方向
indicatorStyle
&滚动条的样式,基本只是设置颜色,总共3个颜色,默认,黑色的,白色的
scrollIndicatorInsets &设置滚动条的位置
UIScrollView分页的实现
UIScrollView的经典例子就是safari的编辑模式了
UIScrollView可以垂直,水平滚动。
如果属性pageEnabled =
YES,则设置其为分页模式,那么没滚动一次就是一页,垂直方向上的一页就是UIScrollView的高度,水平方向就是其宽度。
我们可以设置contentSize,这就是UIScrollView可以滚动的最大区域了。
UIScrollView没有datasource的概念,因为这就是一个view,具体view中的内容摆放完全随意,只是每次都会滚动固定的页面大小。
比如我们有5个页面,我们需要自己计算每个页面的位置,将其水平放在UIScrollView上。
contentSize则设置为5*每个页面的宽度,每个页面的高度。
如果contentSize的高度或这宽度正好与UIScrollView的高度或宽度相等,则在该方向上不能滚动。
具体例子可以查看官方文档的例子,PageControl。
注意:UIScrollView不会带有分页的指示符号,需要利用UIPageControl控制。
但是要想做到safari的效果,我们需要一个小技巧,因为在safari中,当前页时可以看到前后两页的部分内容。
注意:分页的宽度不能修改,所以我们只能缩小UIScrollView的宽度,让其不要占满整个屏幕,同时设置clipsToBouds属性为
NO,这样超出范围的视图也会显示,这样就能看到前后两页的内容,当然需要设置前后两页的alpha值为0.5,做出一个透明效果。
在UIScrollView的滚动事件中,判断位置,当一个页面出现的区域超过1半时,设置alpha为1,小于1半时设置alpha为0.5
现在还有一个问题:UIScrollView的滑动事件响应区域变小了,因为UIScrollView本身变小了,其余我们看到的页面在区域之外,因此我们需要重写UIScrollView所在的parentView的hittest事件,在其他区域的事件返回值为UIScrollView对象,这样用户感觉整个屏幕都是UIScrollView在响应了。
frame.size.width可视范围
contentSize&&内部的范围只要大于可视范围,就可以卷动
若你要分页
frame.size.width & 就是你一页宽度 &, 假设=
你若要有三页
则你的contentSize宽至少要大于280 *2 +1 但小於等於 280*3,它就会有三页
-(void)scrollViewDidEndDecelerating:(UIScrollView
*)scrollView
&&&&CGPoint
offsetofScrollView = contentScrollView.contentO
&&&&这里换成你的计算,想让它停到哪就让它停到哪//offsetofScrollView.x
= ceil(offsetofScrollView.x/78)*78;
&&&&[contentScrollView
setContentOffset:offsetofScrollView];
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。ios C 滚动视图(UIScrollView)详解
移动的设备的屏幕大小有限,当一个视图要显示的内容大于屏幕尺寸的时候就要用到滚动视图,比如一个网页的内容通常比屏幕尺寸大,那么就使用了滚动视图。
UIScrollView有一个contentSize属性,声明如下:
@property(nonatomic) & & & & CGSize & & & & & & & & & & & contentS
这个属性表示滚动视图的内容有多大。
创建滚动视图实例:
- (void)viewDidLoad {
& & [super viewDidLoad];
& & // Do any additional setup after loading the view, typically from a nib.
& & UIScrollView *sv = [[UIScrollView alloc] initWithFrame:self.view.frame];
& & sv.contentSize = CGSizeMake();
& & sv.backgroundColor = [UIColor redColor];
& & [self.view addSubview:sv];
contentSize 属性为{},可以很明显的看到横向和纵向滚动条。
视图的滚动也没什么好说的,主要是设置一些属性:
scrollEnabled &是否开启滚动
scrollsToTop &默认为YES,用户可以单击状态栏滚动至顶部
bounces &默认为YES,当滚动至边界时还可以进一步滚动,松开时迅速弹回至原位
directionalLockEnabled &如果为YES,仅可以同时在一个方向上滚动
decelerationRate &在轻弹屏幕后,滚动的速度逐渐衰减,较低的值衰减越快
showsHorizontalScrollIndicator、showsVerticalScrollIndicator &默认为YES,滚动时滚动指示条可见
indicatorStyle &滚动条的样式(UIScrollViewIndicatorStyleBlack,UIScrollViewIndicatorStyleDefaultUIScrollViewIndicatorStyleWhite)
contentInset &指定内容四周的余量(上 左 下 右的顺序)
scrollIndicatorInsets &指定了滚动指示条在位置的切换
contentOffset &内容的定位点,当前显示内容的左上角
当内容大于屏幕时就可以分页,设置pagingEnabled属性为YES,滚动视图就不允许用户自由滑动,只能通过滑动至相邻的部分。
使滚动视图可以缩放需要时设置minimumZoomScale和maximumZoomScale两个属性的值(默认为1),还需要在滚动视图的委托中实现viewForZoomingInScrollView:方法,该方法返回滚动视图中哪个子视图是可以缩放的,如果滚动视图有多个子视图,但是通常我们需要缩放整个滚动视图的内容,那么将多个视图放在一个视图即可,在将这个视图成为滚动视图的子视图。
滚动视图通过对捏合手势的响应进行缩放,如果缩放超出了我们设置的限制,当手势结束时,尺寸退回到我们设置的限制。如果想要严格的限制缩放不超过我们设置的限制,将bouncesZoom设置为NO就可以了。
在某种情况下,比如我们双击需要进行缩放的时候,就要用代码进行缩放,使用下面两个方法:&
- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated NS_AVAILABLE_(3_0);
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated NS_AVAILABLE_IOS(3_0);
setZoomScale:animated: &根据比例缩放
zoomToRect:animated: &给定矩形的大小进行缩放
UIScrollViewDelegate可以接收大量消息开帮助你跟踪滚动视图的工作
下面是协议的定义
@protocol UIScrollViewDelegate&NSObject&
- (void)scrollViewDidScroll:(UIScrollView *)scrollV & & & & & & & & & & & & & & & & & & & & & & & // any offset changes
- (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 *)scrollV
// 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
- (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
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollV & // called on finger up as we are moving
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollV & & &// called when scroll view grinds to a halt
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollV // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollV & & // return a view that will be scaled. if delegate returns nil, nothing happens
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat) // scale between minimum and maximum. called after any 'bounce' animations
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollV & // return a yes if you want to scroll to the top. if not defined, assumes YES
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollV & & &// called when scrolling animation finished. may be called immediately if already at top
这些方法的意思就不解释了,有注释的,学习最快的方法就是看这些头文件。如何让UIScrollView一直显示滚动条_百度知道
如何让UIScrollView一直显示滚动条
提问者采纳
步骤一:设置scrollView的代理步骤二:让控制器遵守UIScrollView的协议步骤三:实现UIScrollView协议的缩放方法。步骤四:设置UIScrollView的最大和最小缩放比例。步骤五: 按option键 对图片进行伸缩。
来自团队:
其他类似问题
为您推荐:
滚动条的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 uiscrollview上下滚动 的文章

 

随机推荐