• 滚动视图、定时器、分页控件的综合使用


    //
    //  RootViewController.m
    #import "RootViewController.h"
    #define SCROLLWIDTH 300 //
    #define SCROLLHEIGHT 350  //
    @interface RootViewController ()
    {
        //滚动视图的对象指针
        UIScrollView * scrollView;
        //分页控件的对象指针
        UIPageControl * pageCtr;
        //时间控制器的对象指针
        NSTimer * timer;
    
    }
    @end
    
    @implementation RootViewController
    
    //创建时间控制器
    -(void)turnOnTimer{
        
        timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(playImage) userInfo:nil repeats:YES];
        
        [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    }
    
    -(void)playImage{
        
        NSInteger number=scrollView.contentOffset.x/SCROLLWIDTH+1;
        if (number== 4) {
            number=0;
        }
        scrollView.contentOffset = CGPointMake(number * SCROLLWIDTH, 0);
        pageCtr.currentPage=number;
        number++;
    }
    
    //创建滚动视图
    -(void)createScrollView
    {
        scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(10, 70, SCROLLWIDTH, SCROLLHEIGHT)];
        scrollView.contentOffset = CGPointMake(0, 0);
        scrollView.contentSize = CGSizeMake(SCROLLWIDTH * 4, SCROLLHEIGHT);
        self.automaticallyAdjustsScrollViewInsets =NO;
        //跟导航条一起使用 不关会出现bug
        scrollView.bounces = NO;
        
        //设置scrollView的内容视图
        //scrollView上的子视图是平铺在滚动视图上 同一时刻只能显示与滚动视图范围相同大小的子视图
        for(int i =0;i<4;i++)
        {
            UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(SCROLLWIDTH * i, 0, SCROLLWIDTH, SCROLLHEIGHT)];
            NSString * nameStr = [NSString stringWithFormat:@"%d.jpg",i+1];
            imageView.image = [UIImage imageNamed:nameStr];
            [scrollView addSubview:imageView];
        }
        [self.view addSubview:scrollView];
        
        //隐藏横向、纵向的滚动条
        scrollView.showsHorizontalScrollIndicator = NO;
        scrollView.showsVerticalScrollIndicator = NO;
        
        //开启滚动视图的分页效果   不开启的话  五幅图变成一个整体
        scrollView.pagingEnabled = YES;
        
        scrollView.delegate = self;   //调用协议的方法  不调用的话分页控件无效果
        scrollView.minimumZoomScale = 1.0;
        scrollView.maximumZoomScale = 3.0;
    }
    -(void)createPageControl
    {
        pageCtr=[[UIPageControl alloc]initWithFrame:CGRectMake(50, SCROLLHEIGHT-50, 200, 30)];
        //<1>设置分页控件的背景颜色
        pageCtr.backgroundColor=[UIColor clearColor];  //透明色
        //<2>设置分页控件的总页数
        pageCtr.numberOfPages=4;
        //<3>设置初始化分页控件的页码
        pageCtr.currentPage=0;
        
        //<4>
        [self.view addSubview:pageCtr];
        
        //<5>为pageControl添加点击事件
        [pageCtr addTarget:self action:@selector(pressPageControl:) forControlEvents:UIControlEventValueChanged];
    }
    -(void)pressPageControl:(id)sender
    {
        //分页控件一次只能跳转一页 并且只能跳转相邻的页码
        //<1>获取当前控件的显示页码
        int pageNum =(int)pageCtr.currentPage;
        //<2>设置内容视图的偏移位置contentOffSet的值
        [UIView animateWithDuration:0.3 animations:^{
            //0.3是每次换页动作的需要时间
            
        scrollView.contentOffset = CGPointMake(pageNum * SCROLLWIDTH, 0);
            
        } completion:nil];
    }
    //实现协议中的方法
    -(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
    {
        //由于全局变量的名称和该方法的形参名重名了 所以此处有警告
        return [[scrollView subviews] objectAtIndex:pageCtr.currentPage];
    }
    
    -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        //<1>获取减速停止以后滚动视图上内容视图的偏移位置contentOffSet的值
        CGPoint point = scrollView.contentOffset;
        //<2>设置分页控件当前的页码
        pageCtr.currentPage = point.x / SCROLLWIDTH;
    }
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.navigationItem.title = @"滚动视图";
        self.view.backgroundColor = [UIColor cyanColor];
        [self createScrollView];
        [self createPageControl];
        [self turnOnTimer];
        
    }
    
    
    @end

  • 相关阅读:
    MySql存储过程学习总结
    JAVA设计模式之策略模式
    JAVA设计模式之装饰模式
    JAVA设计模式之代理模式
    动手学servlet(四) cookie和session
    动手学servlet(三) 请求头和响应头信息
    动手学servlet(二) servlet基础
    动手学servlet(一) 第一个servlet程序
    HTTP与HttpServlet
    HttpServlet详解
  • 原文地址:https://www.cnblogs.com/sayimba/p/5708428.html
Copyright © 2020-2023  润新知