//

//  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中添加图片

//  取出scrollView的size

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

}

supersr--图片轮播逻辑的更多相关文章

  1. 基于面向对象的图片轮播(js原生代码)

    无论你想走多远,你都需要不断地走下去.前端最精华的便是原生的js,这也是我们前端工程师的技术分层的重要指标,也提现这你的代码能力,开发的水平.废话不多说,进入今天的主要分享————基于面向对象思想的图 ...

  2. 一分钟搞定AlloyTouch图片轮播

      一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,A ...

  3. Javascript和jQuery WordPress 图片轮播插件, 内容滚动插件,前后切换幻灯片形式显示

    用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件 ...

  4. Android高级图片滚动控件,编写3D版的图片轮播器

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17482089 大家好,好久不见了,最近由于工作特别繁忙,已经有一个多月的时间没写博 ...

  5. Angular2组件与指令的小实践——实现一个图片轮播组件

    如果说模块系统是Angular2的灵魂,那其组件体系就是其躯体,在模块的支持下渲染出所有用户直接看得见的东西,一个项目最表层的东西就是组件呈现的视图.而除了直接看的见的躯体之外,一个完整的" ...

  6. html css+div+jquery实现图片轮播

    一直想自己动手做一个图片轮播的控件,查查网上的资料大多引用已经做好的组件,其原理算法不是很清楚,于是自己用jquery写了一个.先看下效果图: 主要界面实现思路如下: 1.新建一个div宽度为100% ...

  7. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  8. 一起写一个Android图片轮播控件

    注:本文提到的Android轮播控件Demo地址: Android图片轮播控件 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用 ...

  9. H5如何做手机app(移动Web App)?图片轮播?ionic、MUI

    移动Web App 跨平台开发 用户不需要去卖场来下载安装App 任何时候都可以发布App只需要一个开发项目 可以使用HTML5,CSS3以及JavaScript以及服务器端语言来完成(PHP,Rub ...

  10. 使用jQuery做简单的图片轮播效果

      一.本特效主要用到的前端知识点 CSS中绝对定位(absolute)CSS实现垂直居中jQuery中简单的淡入淡出动画效果(fadeIn,fadeOut)定时器(setInterval,clear ...

随机推荐

  1. Timestamp 使用

    Timestamp是一个长整形的类型 1.使用方法一 Timestamp nowdate1 = new Timestamp(System.currentTimeMillis()); System.ou ...

  2. 使一个div始终显示在页面中间

    使一个div始终显示在页面中间 假设我们有一个div层:<div id=”myDiv”></div> 首先,我们用css来控制它在水平上始终居中,那么我们的css代码应该是这样 ...

  3. JAVA-Excel文件操作

    使用环境:JAVA 1.8 一.安装 1.下载Poi包 Apache POI 当前最新稳定版本为3.14.下载poi-bin-3.14.zip即可. 2.将下载下来的压缩包解压,将其中的所有jar文件 ...

  4. 怎样用Lodrunner测试WAP站点的性能(两种解决方案)

    其实用IE就可以的!!!! 1.借助opera实现对WAP站点的录制 第一:安装opera软件 第二:Lodrunner选择Web(HTTP/HTML)协议 第三:Lodrunner的Applicat ...

  5. IE浏览器版本判断

    <script type="text/javascript"> var browser=navigator.appName var b_version=navigato ...

  6. [转]CentOS 5.3通过yum升级php到最新版本的方法

    来自:www.jasonlitka.com/media 通过测试,方法三可行: 方法三 vim /etc/yum.repos.d/utterramblings.repo 输入 [utterrambli ...

  7. php中0," ",null和false的区别

    php中很多还不懂php中0,"",null和false之间的区别,这些区别有时会影响到数据判断的正确性和安全性,给程序的测试运行造成很多麻烦.先看一个例子: <? $str ...

  8. 剑指Offer 连续子数组的最大和

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  9. AutoHotkey之自问自答

    偶然的机会,接触到了AutoHotkey这个东西,觉得不错,便花时间了解了一下.以此来记录我在学习AutoHotkey时遇到的各种问题,以及我对其的解释(有可能不专业甚至出错). Time:2015- ...

  10. Android 内容提供器(Content Provider)介绍

    内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性.目前,使用内容 ...