zoukankan      html  css  js  c++  java
  • 滚动视图创建

    这建立一个滚动视图,首先我们建立需要的属性

    @property (strong,nonatomic)UIScrollView *scrollView;
    @property (strong,nonatomic)NSMutableArray *slideImages;
    @property (strong,nonatomic)UIPageControl *pageControl;
    // 这里我们需要他们来建立相应的试图和存放图片


    下面是这个滚动试图的界面的初始化,

    功能有:1.滚动视图图片的添加;2.滚动试图时间控制器的编写;3.滚动视图的大小位置的设置;4.pageController控件的建立;4.滚动试图相关属性的设置

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 定时器 循环
        [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES];
        
        // 初始化 scrollview
        self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
        scrollView.bounces = YES;//滚动试图是否有弹簧效果
        scrollView.pagingEnabled = YES;//滚动试图的界面是否分页
        scrollView.delegate = self;//滚动试图的委托对象为自己
        scrollView.userInteractionEnabled = YES;//是否可以与用户交互
        scrollView.showsHorizontalScrollIndicator = NO;//试图下面的水平滚动滑动条
        [self.view addSubview:scrollView];
        
        // 初始化 数组 并添加四张图片
        slideImages = [[NSMutableArray alloc] init];
        [slideImages addObject:@"1-1.jpg"];
        [slideImages addObject:@"1-2.jpg"];
        [slideImages addObject:@"1-3.jpg"];
        [slideImages addObject:@"1-4.jpg"];
        
        // 初始化 pagecontrol
        self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(120,440,100,18)];// 初始化mypagecontrol
        [pageControl setCurrentPageIndicatorTintColor:[UIColor redColor]];
        [pageControl setPageIndicatorTintColor:[UIColor blackColor]];
        pageControl.numberOfPages = [self.slideImages count];
        pageControl.currentPage = 0;
        [pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventAllTouchEvents]; // 触摸mypagecontrol触发change这个方法事件
        [self.view addSubview:pageControl];
        
        // 创建四个图片 imageview
        for (int i = 0;i<[slideImages count];i++)
        {
            UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]];
            imageView.frame = CGRectMake((320 * i) + 320, 0, 320, 460);
            [scrollView addSubview:imageView]; // 首页是第0页,默认从第1页开始的。所以+320。。。
        }
        
        // 取数组最后一张图片 放在第0页
        UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:([slideImages count]-1)]]]; 
        imageView.frame = CGRectMake(0, 0, 320, 460); // 添加最后1页在首页 循环
        [scrollView addSubview:imageView];
        // 取数组第一张图片 放在最后1页
        imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:0]]]; 
        imageView.frame = CGRectMake((320 * ([slideImages count] + 1)) , 0, 320, 460); // 添加第1页在最后 循环
        [scrollView addSubview:imageView];
       
    //下面的三句是创建滚动视图的一个最终设置,没有了他们,这个滚动视图就运行不了 
        [scrollView setContentSize:CGSizeMake(320 * ([slideImages count] + 2), 460)]; //  +上第1页和第4页  原理:4-[1-2-3-4]-1
        [scrollView setContentOffset:CGPointMake(0, 0)];
        [self.scrollView scrollRectToVisible:CGRectMake(320,0,320,460) animated:NO]; // 默认从序号1位置放第1页 ,序号0位置位置放第4页
    }
    上面的代码中,有那么一句,就是
    scrollView.delegate = self;//滚动试图的委托对象为自己

    所以我们要使得这个类遵循相应地协议,在接口文件的添加下面相应地语句:

    @interface testScrollViewViewControllerViewController : UIViewController<UIScrollViewDelegate>

    下面就来编写这个协议里面的函数,这两个函数,将我们的scrollView和pageController链接起来,然后再将他们的操作连贯起来:

    // scrollview 委托函数
    - (void)scrollViewDidScroll:(UIScrollView *)sender
    {
        int page = (int)self.scrollView.contentOffset.x/320;
        
        page --;  // 默认从第二页开始
        pageControl.currentPage = page;
    }
    
    // scrollview 委托函数--完成了一个循环的设置
    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
    {
        int currentPage = (int)self.scrollView.contentOffset.x/320;
        
        if (currentPage==0)
        {
            [self.scrollView scrollRectToVisible:CGRectMake(320 * [slideImages count],0,320,460) animated:NO]; // 序号0 最后1页
        }
        else if (currentPage==([slideImages count]+1))
        {
            [self.scrollView scrollRectToVisible:CGRectMake(320,0,320,460) animated:NO]; // 最后+1,循环第1页
        }   
    }


    最后,我们来完成刚刚操作时间选取器和操作pageController的action

    // pagecontrol 选择器的方法
    - (void)turnPage
    {
        int page = pageControl.currentPage; // 获取当前的page
        
        [self.scrollView scrollRectToVisible:CGRectMake(320*(page+1),0,320,460) animated:YES]; // 触摸pagecontroller那个点点 往后翻一页 +1
    }
    // 定时器 绑定的方法
    - (void)runTimePage
    {
        int page = pageControl.currentPage; // 获取当前的page
        page++;
        page = page > 3 ? 0 : page ;
        pageControl.currentPage = page;
        [self turnPage];
    }
    

    这样,我们就将我们的滚动试图完成了。



  • 相关阅读:
    事务
    数据库三大范式
    jdbc
    Jdbc事务
    Android 学习笔记2开发软件的常识&搭建开发环境(windows7)
    2011年起航
    Android 学习笔记3Android 工程目录介绍&程序执行过程
    我的第一篇日志基于AT89S52的单片机的LED点阵显示屏的设计
    算法基础之快速排序
    LeetCode88.合并两个有序数组
  • 原文地址:https://www.cnblogs.com/AbeDay/p/5026960.html
Copyright © 2011-2022 走看看