iOS基础开发-UI基础之UIScrollview

43 篇文章 0 订阅

        一个手机屏幕显示的内容是有限,当内容数据多,在可是View中就展示不完全,这时候就需要用到UIScrollView控件.UIScrollView会隐藏超出内容的部分,相当于UIScrollView默认设置了clipBounds为YES.
       有时候,我们可能添加了UIScrollView控件,但是它无法滚动,原因可能有下面几个:
1.没有设置contentsize,或者设置的content size小于或者等于scrollView的尺寸;
2.设置scrollEnable = NO;
3.userinteractionEnable = NO;(这方法有别去上一个,这个是是否与用户交互)
       上面说到的两种方法都可能造成不能滚动,那么到底他们的区别是什么?scrollEnable仅仅是不能滚动,其他事情依旧能够响应,而userinteractionEnable禁止任何交互事件.包括其子控件的所有交互事件都会被禁止.需要注意的一点,UIScrollView的frmae决定了可视范围,contentsize决定了内容滚动的范围,滚动式内容进行滚动,UIScrollView控件本身是不滚动的
UIScrollView的常见属性:
>bounces 弹簧效果
     self.scrollViewbounces = NO;//去除弹簧效果
>alwaysBounceVertical alwaysBounceHorizontal
    不管有没有contentSize,总是有弹簧效果
    作用:用来做下拉刷新和上拉刷新的
>indicatorStyle
    设置滚动条的颜色
>self.scorllView.subViews
    查看UIScrollView中有多少个子控件
>contentOffSet
      控制内容的滚动,也称为内容的偏移量
      偏移量 = contentSize左上角 与 内容左上角的差值
      UIScorllView的左上角 - contentSize左上角
设置滚动条的颜色
      控制内容的滚动,也称为内容的偏移量
      偏移量 = contentSize左上角 与 内容左上角的差值
      UIScorllView的左上角 - contentSize左上角
>self.scrollViewbounces = NO;//去除弹簧效果
查看UIScrollView中有多少个子控件
设置内边距(增加额外的滚动区域)
>contentInset
       设置内边距(增加额外的滚动区域)
不管有没有contentSize,总是有弹簧效果
作用:用来做下拉刷新和上拉刷新的

  UIScrollView的delegate
代理的作用
    监听器的作用,可以监听UIScrollView的各种事件(只要成为UIScrollView的代理,就能监听UIScrollView的行为)
    当UIScrollView发生一系列行为时,就会告诉代理(滚动了、点击了、拖拽了)
代理的使用规律
      代理一般是当前控制器对象
      代理id类型,且必须是弱指针
      代理协议格式
            控件类名Delegate,比如:UIScrollViewDelegate,UITextFieldDelegate
     代理方法
           方法名一般以控件开头.比如UIScrollView的代理一般以scrollView开头
监听UIScrollView各种行为的三大步骤
    设置scrollView的delegate(代理)为控制器对象
    控制器要遵守协议UIScrollViewDelegate协议
    控制器要实现UIScrollViewDelegate协议里面的方法
UIScrollView常见的代理方法
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
     -(void)scrollViewWillEndDragging..
     -(void)scrollViewDidEndDragging...
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
监听器的作用,可以监听UIScrollView的各种事件(只要成为UIScrollView的代理,就能监听UIScrollView的行为)
当UIScrollView发生一系列行为时,就会告诉代理(滚动了、点击了、拖拽了)
代理一般是当前控制器对象
代理id类型,且必须是弱指针
代理协议格式
控件类名Delegate,比如:UIScrollViewDelegate,UITextFieldDelegate
代理方法
方法名一般以控件开头.比如UIScrollView的代理一般以scrollView开头
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 -(void)scrollViewWillEndDragging..
 -(void)scrollViewDidEndDragging...
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
scrollView的代理可以是任何类型的OC 对象
设置scrollView的delegate(代理)为控制器对象
控制器要遵守协议UIScrollViewDelegate协议
控制器要实现UIScrollViewDelegate协议里面的方法
代理的注意点
    scrollView的代理可以是任何类型的OC 对象
    代理一定是weak


  利用UIScrollView实现分页

01-开启分页功能
    往scrollView中添加五张图片
    设置contentSize
    开启分页功能
               self.scrollView.pageEnable = YES;
        分页的标准:以scrollView的尺寸为一页
02-设置pageControl(监听scrollView的滚动设置页码)
    第一种:scrollView停止滚动改变页码
    第二种:scrollView滚动过程中改变页码
往scrollView中添加五张图片
设置contentSize
开启分页功能
     self.scrollView.pageEnable = YES;
    分页的标准:以scrollView的尺寸为一页
03-设置定时器
    注意事项
        NSTimer是一次性的,要么持续工作,一旦停止工作就无法再次使用
    存在的问题?
        拖入UITextView,不断地拖拽框中的文字,定时器不工作了
        原因:和线程相关,线程就是用来执行任务的,同一时间只能做一件事情
    如何解决?
         修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
        主线程不管在处理什么操作,都会抽时间处理NSTimer
注意事项
    NSTimer是一次性的,要么持续工作,一旦停止工作就无法再次使用
存在的问题?
    拖入UITextView,不断地拖拽框中的文字,定时器不工作了
    原因:和线程相关,线程就是用来执行任务的,同一时间只能做一件事情
如何解决?
     修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
    主线程不管在处理什么操作,都会抽时间处理NSTimer
第一种:scrollView停止滚动改变页码
第二种:scrollView滚动过程中改变页码
04-UIScrollView的分页-封装
    自定义控件(XIB)
        新建:PageView
        新建XIB文件描述PageView
        给子控件设置数据
        设置图片
                       提供imageNames属性,在pageView中实现set方法
                        -拷贝原来的代码
    -根据图片名数据创建对应的imageView
    -设置scrollView的contentSize
    -在awakeFromNib中设置pageControl
    -设置pageView成为scrollView的代理
        存在的问题?
            内部的子控件不会跟随父控件伸缩(学完屏幕适配可以轻松解决)
            多次传入新图片,出现叠加效果
        解决?
             让self.scrollView.subViews数组中的所有控件都执行removeFromSuperView方法
[self.scrollView.subViews makeObjectsPerformSelector:@selector(removeFromSuperView)];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值