zoukankan      html  css  js  c++  java
  • supersr--图片轮播逻辑

    //

    //  ViewController.m

    // 图片轮播

    //

    //  Created by apple on 14-5-18.

    //  Copyright (c) 2014  All rights reserved.

    //

     

    #import "ViewController.h"

     

    @interface ViewController () <UIScrollViewDelegate>

     

    @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

    @property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

     

    /**

     *  定义属性来记录当前NSTimer对象

     */

    @property (nonatomic, strong) NSTimer *timer;

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

       

    //  1.scrollView中添加图片

    //  取出scrollViewsize

        CGSize scrollSize = self.scrollView.frame.size;

        

        for (int i = 0; i < 5; i++) {

            UIImageView *imageView = [[UIImageView alloc] init];

            CGFloat scrollWidth = scrollSize.width;

            CGFloat imageX = scrollWidth * i;

            CGFloat imageY = 0;

            CGFloat imageW = scrollWidth;

            CGFloat imageH = scrollSize.height;

            imageView.frame = CGRectMake(imageX, imageY, imageW, imageH);

            

            NSString *imageName = [NSString stringWithFormat:@"img_%02d",i+1];

            

            imageView.image = [UIImage imageNamed:imageName];

        

            [self.scrollView addSubview:imageView];

        }

    //  2.设置contentSize

    //  不支持竖直滚动就高度设置为0

        self.scrollView.contentSize = CGSizeMake(scrollSize.width * 5, 0);

     

    //  出现分页效果,YES表示有分页效果,NO 没有分页效果,默认NO

        self.scrollView.pagingEnabled = YES;

    //  去掉水平滚动条

        self.scrollView.showsHorizontalScrollIndicator = NO;

        

    // 让控制器成为scrollView的代理

    //  设置scrollView的代理为self

        self.scrollView.delegate = self;

        

    #pragma mark - 自动轮播代码开始

    /*

    //  创建定时器

    //  NSTimeInterval 时间间隔 单位s

    //  调用target这对象的selector方法

    //  userInfo 数据,如果不需要就设置为nil

    //  repeats 是否重复执行这个方法,YES表示重复执行

        NSTimer *timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];

    //  添加到运行循环中

    //  NSRunLoopCommonModes 与处理用户事件处于同一个级别

       [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

        

        

    //  1.创建NSTimer对象

    //  2.把这个NSTimer添加主运行循环中以NSDefaultRunLoopMode的模式

    //    self.timer  = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];

    */

        

        [self startTimer];

    }

     

     

    - (void) startTimer

    {

       self.timer = [NSTimer timerWithTimeInterval:3 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];

        //  添加到运行循环中

        //  NSRunLoopCommonModes 与处理用户事件处于同一个级别

        [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

    }

     

     

    - (void) nextPage

    {

        NSLog(@"%s",__func__);

    //  获取当前也

        NSInteger currentPage = self.pageControl.currentPage;

    //  计算下一页

        NSInteger nextPage = -1;

        if (currentPage == self.pageControl.numberOfPages - 1) {

            nextPage = 0;

        }else{

            nextPage = currentPage+1;

        }

    //  计算contentOffsetX的值

        CGFloat contextOffsetX  = nextPage * self.scrollView.frame.size.width;

        

       [UIView animateWithDuration:1 animations:^{

               self.scrollView.contentOffset = CGPointMake(contextOffsetX, 0);

       }];

        

     

    }

     

    #pragma mark scrollView的代理方法

    // 当用户拽住scrollView中内容时候会执行这个方法

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

    {

    //  invalidate 让定时器失效

    //  如果调用这个方法,就能再次使用了

        [self.timer invalidate];

    }

     

    // 当用户已经停止拖拽了(当用户手从界面抬起的时候)

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

    {

    //  创建一个新NSTimer的对象

        //  1.创建NSTimer对象

        //  2.把这个NSTimer添加主运行循环中以NSDefaultRunLoopMode的模式

    //    self.timer  = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(nextPage) userInfo:nil repeats:YES];

        

        

        [self startTimer];

    }

     

     

    // 监听scrollView的滚动过程

     

    - (void)scrollViewDidScroll:(UIScrollView *)scrollView

    {

    // 获取滚动位置的x坐标

       CGFloat offsetX = scrollView.contentOffset.x;

    // 计算当前是第几页

    // round(double) 四舍五入

       CGFloat page = round(offsetX / scrollView.frame.size.width);

    //    NSLog(@"%lf",page);

        

       if (page != self.pageControl.currentPage) {

            //  current 当前的

            self.pageControl.currentPage = page;

        

        }

     

    //    self.pageControl.numberOfPages  用于设置一共有多少页的

       

    }

  • 相关阅读:
    python读写文件模式的区别
    【Terminal】终端美化
    【Macintosh】MAC基本使用
    【MySQL】使用mysql数据量统计
    软件测试自学还是报班好?需要掌握哪些技能?
    400页共计800道软件测试面试真题汇总!超全干货
    软件测试是吃青春饭的吗?30岁后软件测试该何去何从?
    leetcode_链表操作1
    [数据库系列之MySQL] Mysql整体架构浅析一
    Ubuntu 配置谷歌Android Test Station
  • 原文地址:https://www.cnblogs.com/supersr/p/4868528.html
Copyright © 2011-2022 走看看