码迷,mamicode.com
首页 > 其他好文 > 详细

图片轮播逻辑

时间:2015-10-10 22:50:19      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

//

//  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  用于设置一共有多少页的

   

}

图片轮播逻辑

标签:

原文地址:http://www.cnblogs.com/supersr/p/4868528.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!