美文网首页iOS的心路里程
iOS控件--UIScrollView--滑动控件

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

作者: 罂粟之城 | 来源:发表于2018-12-28 16:48 被阅读2次

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控件的更好使用欢迎留言交流!

相关文章

网友评论

    本文标题:iOS控件--UIScrollView--滑动控件

    本文链接:https://www.haomeiwen.com/subject/lfwdwxtx.html