iOS控件--UIScrollView--滑动控件

UIScrollView是一个能够滚动的视图控件,可以滑动来展示大量的内容,并且可以让用户通过滚动拖拽手势查看所有的内容;也可以通过捏合手势来放大或缩小观看的内容。

> UIScrollView的使用步骤:

    1. 将需要展示的内容添加到UIScrollView中。
    1. 设置UIScrollView的contentSize属性,告诉UIScrollView所有内容的尺寸,也就是告诉 它滚动的范围。
    1. 其中很重要的一点是在添加控件或图片到UIScrollView中时不能固定其(x,y)值否则不能移动或相对位置。(固定的意思不是初始的位置值不设定,而是让其位置(x,y)值可以改变,以便UIScrollView可以实现滑动)

> UIScrollView的属性:

1)常用属性:

    @property(nonatomic)CGPoint  contentOffset; 此属性用来表示UIScrollView滚动到的位置。又叫内容偏移量:内容左上角减去scoreView左上角差的值。就是添加到UIScrollView视图中显示的图像或控件的x,y坐标,初始值为(0,0),设置之后初始显示的坐标就改变了。
    @property(nonatomic)CGSize  contentSize;这个属性?用来表示UIScrollView内容的尺?大小,滚动范围大小。就是要看到的整个视图范围包括显示的和未显示的。
    @property(nonatomic)UIEdgeInsets  contentInset; 这个属性能够在UIScrollView的四周增加额外的滚动区域即周围的厚度。在那个控件的周围加上一层厚度。

2)其他属性:

    @property(nonatomic) BOOL bounces; d 设置UIScrollView是否需要弹簧效果。默认为YES; 
    @property(nonatomic,getter=isScrollEnabled)BOOL scrollEnabled; 设置UIScrollView是否能滚动   
    @property(nonatomic) BOOL showsHorizontalScrollIndicator; 是否显?示水平滚动条 。默认不显示。  
    @property(nonatomic) BOOL showsVerticalScrollIndicator; 是否显示垂直滚动条 默认不显示。

> UIScrollView代理的使用:

scrollViewDidScroll:只要scrollView在滚动,就会调用这个方法(监听scrollView的滚动),已经开始滚动

        -(void)scrollViewDidScroll:(UIScrollView*)scrollView

scrollViewWillBeginDragging:用户即将开始拖拽scrollView,手指碰到屏幕,并且移动,执行一次

        -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

用户即将停止拖拽scrollView,就会调用这个方法

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

scrollViewWillBeginDecelerating:scrollView已经开始减速,手指离开屏幕,正在滚动的视图减速,执行一次

    -(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView

scrollViewDidEndDecelerating:视图静止,执行一次

        - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

用户已经停止拖拽scrollView,就会调用这个方法

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

> UIScrollView其它功能的使用

>>1.缩放功能:

    scrollView.minimumZoomScale = 0.05;//设置可缩小的最小比例  

    scrollView.maximumZoomScale = 5.0;//设置可放大的最大比例
/*与缩放有关的代理方法*/
viewForZoomingInScrollView:指定scrollView的某一个子视图为可缩放视图,前提条件是该视图已经添加到scrollView上面
        - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
        {
            UIView *view = [scrollView viewWithTag:1000];
            return view;
        }
scrollViewWillBeginZooming:withView:开始缩放 第二个参数是指我们将要缩放的视图(也就是是指定的view),执行一次
        - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
        {
            NSLog(@"%@",view);
        }
scrollViewDidZoom:正在缩放的代理方法 只要正在缩放,就会执行此方法,所以此方法在缩放过程中会多次调用
        -(void)scrollViewDidZoom:(UIScrollView *)scrollView
        {
            NSLog(@"%s",__func__);
        }
scrollViewDidEndZooming:withView:atScale:缩放结束执行的代理方法, view当前正在缩放的视图,scale当前正在缩放视图的缩放比例,执行一次
    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale
        {
             NSLog(@"%s",__func__);
        }

>> 2.设置是否分页:scrollView.pagingEnabled=YES;

>> 如果UIScrollView无法滚动,可能是以下原因:

    1. 没有设置contentSize/contentSize不能设置小于全部看到的视图范围值,设置的值是要全部看到的范围。 
    2. *很重要的一点是在加入到UIScrollView的控件或者图片不能在UIScrollView中设置固定位置即(x,y) 或相对布局固定,左右的对齐方式在使用轮播图时是可以使用的。scrollEnabled = NO  
    3. 没有接收到触摸事件:userInteractionEnabled = NO  
    4. 没有取消autolayout功能(在Sotryboard中添加了scrollView控件,要想scrollView滚动,必须取消autolayout)

查询: UIScrollView 控件不能滑动原因

**** 使用 UIScrollView + Masonry 布局 ****
在进行 UIScrollView  subview 布局时,需要进行位置postion和size设置,需要注意以下原因:
    1.纵向滑动不使用 left-right 计算确定宽度;横向滑动不使用 top-bottom 计算确定高度。
    2. 使用 Masonry 需使用 width/height 自行设置确定高度和宽度,并且 left/right top/bottom不能成对出现。

>> 经验证,导致不能滑动
    1. scrollView.contentSize/contentOffset 前后设置的对于 UIScrollView 对象本身无任何影响,这二者也只是UIScrollView的两个属性, 除非有特殊情况出现。
    1. 未设置 scollView.scrollEnabled = YES;
    2. 未设置 scrollView.contentSize = CGSizeMake(kScreenWidth,kScreenHight*2); // 并且设置内容尺寸要大于设置的UIScrollView的frame。
    3. 在 UIScrollView 对象视图上添加新的控件或者 UIView 对象后不能使用 Masonry 固定其位置,否则会导致不能滑动。
    4. 即 使用 UIScrollView + Masonry 布局不能同时使用,使用另外方法完成 Masonry布局
    
>> 经验证,不能滑动和以下原因无关
    1. scollView.userInteractionEnabled = YES;
    2. scollView.multipleTouchEnabled = YES;
    3. scrollView(UIScrollView控件对象),使用Masonry布局无影响。即使固定scrollView frame
[self.bottomSV mas_makeConstraints:^(MASConstraintMaker *make) {
    make.top.equalTo(self.mas_top).offset(kScreenHeight/2-100);
    make.left.right.equalTo(self);
    make.bottom.equalTo(self.mas_bottom).offset(0);
}];
    
>>> 如果在最后还是没有找到不能滑动原因或者急需滑动解决,可以暂且使用UITableView或者UICollectioView解决需要滑动的问题,也不失为一种方法。

以上是对 UIScrollView 控件的描述和使用,不以偏概全,只授之以渔,有更好的操作也会及时更新如果您有UIScrollView控件的更好使用欢迎留言交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 一、简介 <<继承关系:UIScrollView --> UIView-->UIResponder-->NSObj...
    无邪8阅读 1,857评论 0 0
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,090评论 4 62
  • 你可以天天去约会,但你一定要时刻保持分寸; 你可以有很多备胎,但你一定要做到心中有数; 有时候,较高的颜值和过硬的...
    丹娜服饰色彩手绘阅读 588评论 0 2
  • 春光无限好,外面到处是毛茸茸的绿意,窝在家里也是太负春光,于是我们仨踏青去。 田野里,麦苗青青,远远望去,一块块麦...
    简一jy阅读 469评论 1 1
  • 撒花 ✺(∗❛ัᴗ❛ั∗)✺第一次卤鸡爪,还算成功吧 口感嘛有嚼劲但不腥,表面弹性十足中间较为软糯,“经”道感非常...
    庙殊阅读 177评论 0 0