美文网首页
常用控件UIScrollView

常用控件UIScrollView

作者: Coder007 | 来源:发表于2016-03-21 17:29 被阅读54次

    UIScrollView(包括它的子类UITableView和UICollectionView)是iOS开发中最常用的UI组件,大部分App的核心界面都是基于三者之一或者三者的组合实现的。UIScrollView是UIKit中为数不多的能响应滑动收拾的View,相比自己用手势去实现,UIScrollView的体验更好。

    UIScrollView的常见属性

    //展示的大小
    @property(nonatomic) CGRect frame;
    
    //内容的大小(可以滚动的大小)
    //如果想在水平方向不让滚动,可以设置width=0,也就是如果在垂直方向上不想滚动,可以设置height=0
    @property(nonatomic) CGSize contentSize;
    
    //设置scrollView能否滚动
    @property(nonatomic,getter=isScrollEnabled) BOOL          scrollEnabled;
    
    //能否接收触摸事件
    @property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled;
    
    //表示scrollView滚动的位置
    //内容左上角和scrollView的左上角的间距值
    @property(nonatomic) CGPoint contentOffset;
    
    //这个属性能够在UIScrollView的4周增加额外的滚动区域
    @property(nonatomic) UIEdgeInsets contentInset;
    
    //设置UIScrollView是否需要弹簧效果
    @property(nonatomic) BOOL bounces;
    
    //是否显示水平滚动条
    @property(nonatomic) BOOL showsHorizontalScrollIndicator;
    
    //是否显示垂直滚动条
    @property(nonatomic) BOOL showsVerticalScrollIndicator;
    

    从网上找了一张图片来描述UIScrollView的尺寸:

    1.png

    UIScrollView的常用代理

    下面列出几个常用的代理方法:

    /**
     * 只要是拖动,都会调用,调用频率很高,官方的解释是: any offset changes
     */
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
    }
    
    /**
     * 即将开始拖拽的时候调用
     */
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
    {
    }
    
    /**
     * 结束拖拽的时候调用
     */
    - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    {
    }
    
    /**
     * (减速完毕)由于惯性停止滚动的时候调用
     */
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
    }
    

    UIScrollView的缩放

    • 缩放需要设置的几个点:
      • 需要设置最大缩放比例和最小缩放比例
      • 需要指定缩放的内容
        • 这个内容需要在代理中返回
    // 最小缩放比例
    // 默认是1.0
    @property(nonatomic) CGFloat minimumZoomScale;
    
    // 最大缩放比例
    // 默认是1.0 必须大于等于 minimumZoomScale
    @property(nonatomic) CGFloat maximumZoomScale;
    
    /**
     这个方法的返回值决定了要缩放的内容(返回值只能是UIScrollView的子控件)
     */
    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
    }
    
    /**
        只要缩放比例有变化,就会调用该方法
     */
    - (void)scrollViewDidZoom:(UIScrollView *)scrollView
    {
    }
    
    

    UIScrollView和UIPageControl的分页

    • 只要将UIScrollView的pageEnabled属性设置为YES,UIScrollView会被分割成多个独立的页面,里面的内容就能进行分页展示。
    • 一般使用分页功能,都会配合UIPageControl增强分页效果

    UIPageControl常用属性如下:

    
    //一共多少页
    @property(nonatomic) NSInteger numberOfPages;
    
    //当前显示的页码
    @property(nonatomic) NSInteger currentPage;
    
    //只有一页时,是否需要隐藏页码指示器
    @property(nonatomic) BOOL hidesForSinglePage;
    
    //其他页码指示器的颜色
    @property(nonatomic,retain) UIColor *pageIndicatorTintColor;
    
    //当前页码指示器的颜色
    @property(nonatomic,retain) UIColor *currentPageIndicatorTintColor;
    

    分页的时候拖动,拖动超过一半的时候放开,会自动进入到下一页,如果没有超过一半,就还是停留在这一页。这个时候我们如果想UIPageControl同步进行页码的更新的话,那么就需要在UIScrollView的代理方法中进行页码的计算:

    /**
     * 只要scrollView在滚动,就会调用
     */
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView
    {
        // 0.3 > (int)(0.3 + 0.5) > 0
        // 0.6 > (int)(0.6 + 0.5) > 1
        // 小数四舍五入为整数 : (int)(小数 + 0.5)
        self.pageControl.currentPage = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);
    }
    

    了解了这些,就可以做出轮播图了。

    相关文章

      网友评论

          本文标题:常用控件UIScrollView

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