zoukankan      html  css  js  c++  java
  • UIScrollView 和 UIPageControl

    UIScrollView

    【滚动视图】非常重要

    UIScrollView是滚动视图,是其它带有滚动功能视图的父类,

    本身不显示或者只显示背景,主要负责子视图的滚动和翻页。

    一、常用属性

    1、基本方法

      a、设置内容尺寸

      //设置滚动视图的contentSize

        self.scrollView.contentSize = self.label.frame.size;

       //内容的尺寸,默认情况下 内容的尺寸等于 视图的大小

      b、是否滚动、边界回弹、指示条、一直滚动

        //设置是否能滚动 ,默认YES

        //scrollView.scrollEnabled = NO;

        //滚动条

        //是否显示水平方向的滚动条

        scrollView.showsHorizontalScrollIndicator = YES;

        //是否显示垂直方向的滚动条

        scrollView.showsVerticalScrollIndicator = NO;

       //滚动条风格

       //UIScrollViewIndicatorStyleDefault,

        //UIScrollViewIndicatorStyleBlack,

        // UIScrollViewIndicatorStyleWhite

        scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite;

       //设置是否可以回弹

        scrollView.bounces = YES;

       //水平方向一直可以滚动(YES可以滚动),条件:内容的大小小于视图的大小,回弹必须是YES

        scrollView.alwaysBounceHorizontal = YES;

        //垂直方向一直可以滚动

        scrollView.alwaysBounceVertical = YES;

      c、松手后的减速的加速度

        //设置松手以后减速的加速度

        //CGFloat UIScrollViewDecelerationRateNormal 正常减速

        //CGFloat UIScrollViewDecelerationRateFast 快速减速

        scrollView.decelerationRate = UIScrollViewDecelerationRateFast;

            d、点击状态栏回滚到顶部

      //点击状态栏自动滚回顶部,默认yes;

        scrollView.scrollsToTop = YES;

            e、设置偏移偏移量

        //设置偏移,重要属性

        scrollView.contentOffset = CGPointMake(300, 300);

      //等5秒调用self 的 wait方法

        [self performSelector:@selector(wait) withObject:nil afterDelay:5];

    - (void)wait {

        //设置偏移,带有动画效果

        [_scrollView setContentOffset:CGPointMake(100, 100) animated:YES];

    }

    也就是上边的动画结束,调用方法

    //用代码写 offset 滚动的时候 才会调用这个方法

    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

        NSLog(@"代码方式,滚动动画结束");

    }

            f 、按页滚动

       //设置是否可以按页滚动,默认NO;

        scrollView.pagingEnabled = YES;

        //如果滚动视图的宽度,正好是子视图的宽度的整数倍,正好按页滚动,一页一页的完整显示

            g、缩放相关

     //设置缩放的大小,必须设置代理才能缩放(实现对应的方法viewForZoomingInScrollView)

        scrollView.delegate = self;

        //最小缩放倍数

        scrollView.minimumZoomScale = 0.5;

        //最大缩放倍数

        scrollView.maximumZoomScale = 2.0;

    /**

     *  实现代理方法

     */

    //指定需要缩放的视图

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

        

        return scrollView.subviews[0];

    2、代理方法

            a、滚动

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

        NSLog(@"即将开始拖拽");

    }

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

        NSLog(@"已经停止拖拽");

    }

            b、自由减速

    - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {

        NSLog(@"即将开始减速");

    }

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

        NSLog(@"停止结束 减速");

            c、代码方式滚动结束

    - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {

        NSLog(@"代码方式,滚动动画结束");

    }

            d、缩放相关

    //指定需要缩放的视图

    - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {

            return scrollView.subviews[0];

    }

    - (void)scrollViewDidZoom:(UIScrollView *)scrollView {

        NSLog(@"即将开始缩放");

    }

    - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {

        NSLog(@"已经结束缩放");

    }

    二、按页控制

    应用

    UIScrollView常用属性

    contentSize

    contentInset 不常用

    bounces 弹簧效果

    pagingEnabled 是否是分页滑动效果

    scrollEnabled 是否允许滑动,如果设置为no,则只能通过方法滑动,不能通过手势滑动

    showsHorizontalScrollIndicator 显示水平滚动条

    showsVerticalScrollIndicator 显示垂直滚动条

    indicatorStyle 滚动条风格

    scrollIndicatorInsets 滚动条inset, 不常用

    decelerationRate 松手后加速度,设置越大,停下来越慢,不常用

    scrollsToTop 是否支持点击 statusbar回到顶端,默认YES

    isTracking // 只读属性,判断滚动视图是否被触摸,可能还没有滑动

    isDragging // 只读属性,判断滚动视图是否被滑动,指手未松开

    isDecelerating // 只读属性,判断是否在减速运动,指手指松开后

    缩放:

    minimumZoomScale

    maximumZoomScale

    实现UIScrollView的缩放,必须使maximumZoomScale(默认1.0)和minimumZoomScale(默认1.0)不同 ,并且需要在delegate中的viewForZoomingInScrollView: 方法中返回需要缩放的view。实现以上即可进行缩放。

    pragma mark -

    // return a view that will be scaled. if delegate returns nil, nothing happen

    • (UIView )viewForZoomingInScrollView:(UIScrollView )scrollView {
      // 返回哪个子视图被缩放
      // 一般来讲,不缩放scrollView本身,只缩放返回的子视图
      return scrollView.subviews[0];
      }
    • (void)scrollViewDidZoom:(UIScrollView *)scrollView;
    • (void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(CGFloat)scale;
    • (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

    // 一旦滚动,就会无条件调用,没有任何时间点

    // 无论手指在拖还是不在拖

    • (void)scrollViewDidScroll:(UIScrollView *)scrollView;

    // 在松开手指的那一瞬间被调用

    • (void)scrollViewWillEndDragging:(UIScrollView )scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint )targetContentOffset {
    • // NSLog(@”将要结束滚动”);
    • // NSLog(@”加速度:%f %f”, velocity.x, velocity.y);
    • // NSLog(@”预测停留点:%f %f”, targetContentOffset.x, targetContentOffset.y);
    • // velocity: 加速度
    • // targetContentOffset: 预测将要停留的点
    • }

    // 滑动结束,将要开始减速

    // 手指离开了,但实际上scrollView并不一定结束了滚动

    • (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
    • ;

    // 将要减速

    • (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

    // 减速结束

    • (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

    // 结速滚动后调用,要通过代码让它滚动时,此方法才会被调用

    • (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
      NSLog(@”通过代码滚动结束”);

    // 当用户点出iPhone状态条时,滚动视图委托可以决定视图是否滚动回到开头

    • (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {

      // NSLog(@”已经滚动到顶部”);

    页控制   UIPageControl

    //创建一个Scrollview

    - (void)createScrollView {

        UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:self.view.frame];

        self.scrollView = scrollView;

        self.scrollView.pagingEnabled = YES;

        //设置代理

        scrollView.delegate = self;

        [self.view addSubview:scrollView];

        [self createPageControl];

    }

    #pragma mark - UIScrollViewDelegate

    //结束减速代理

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {

        //设置pageControl的小圆点

        //contenOfsset   用滚动视图水平方向的偏移量 除以scrollView的宽度 ,得出当前所在页面

        NSInteger currentPage = scrollView.contentOffset.x / scrollView.frame.size.width;

        //设置pageControl的选中点

        self.pageControl.currentPage = currentPage;

    }

    - (void)createPageControl {

        UIPageControl *pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 300 ) / 2, 500, 300,40)];

        self.pageControl = pageControl;

        [self.view addSubview:pageControl];

        pageControl.numberOfPages = 4;

        //设置小圆点

        pageControl.pageIndicatorTintColor = [UIColor purpleColor];

        //设置选中的小圆点的颜色

        pageControl.currentPageIndicatorTintColor = [UIColor greenColor];

        //添加事件

        [pageControl addTarget:self action:@selector(pageControlPressed:) forControlEvents:UIControlEventValueChanged];

    }

    //pageControl值发生变化

    - (void)pageControlPressed:(UIPageControl*)sender {

        //设置滚动视图的偏移量

        //得到水平偏移量

        CGFloat offsetX = sender.currentPage * _scrollView.frame.size.width;

        [_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];

  • 相关阅读:
    Codeforces Round #411 (Div. 2)
    腾讯比赛资料
    AtCoder Beginner Contest 060
    hdu 5288 数学 ****
    hdu 1866 几个矩形面积的和 ***
    hdu 2232 矩阵 ***
    bzoj 1415 期望+记忆化搜索 ****
    hdu 5033 单调栈 ****
    hdu 3032 sg打表找规律 *
    hdu 2516 FIB博弈
  • 原文地址:https://www.cnblogs.com/jiang-xiao-yan/p/5952513.html
Copyright © 2011-2022 走看看