#import "RootViewController.h"

 #define width [UIScreen mainScreen].bounds.size.width
#define heigthY 150
#define scrollTime 1 @interface RootViewController ()<UIScrollViewDelegate>
{
UIScrollView *_scrollView;
NSMutableArray *imageArray;
UIPageControl *pageControl;
}
@end @implementation RootViewController - (void)dealloc
{
imageArray = nil;
[super dealloc];
} - (void)loadView
{
[super loadView];
_scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(, , width, heigthY)];
_scrollView.pagingEnabled = YES;
_scrollView.delegate = self;
// 开始时选中第二个图片 图片的布局[3-1-2-3-1]
_scrollView.contentOffset = CGPointMake(width, );
// 隐藏水平滚动条
_scrollView.showsHorizontalScrollIndicator = NO; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(width - ,heigthY - , , )];
// 设置pageControl不支持用户操作
pageControl.userInteractionEnabled = NO;
pageControl.currentPageIndicatorTintColor = [UIColor redColor];
pageControl.pageIndicatorTintColor = [UIColor greenColor];
[self.view addSubview:_scrollView];
[self.view addSubview:pageControl];
[_scrollView release];
[pageControl release]; } - (void)viewDidLoad {
[super viewDidLoad];
imageArray = [[NSMutableArray alloc] init];
NSArray *tempArray = @[@"1-3.jpg",@"1-1.jpg",@"1-2.jpg",@"1-3.jpg",@"1-1.jpg"];
[imageArray addObjectsFromArray:tempArray];
// 根据imageArray的数量设置_scrollView的内容大小
_scrollView.contentSize = CGSizeMake(width * imageArray.count, heigthY);
pageControl.numberOfPages = imageArray.count - ;
// 给_scrollView添加图片
[self addImagesWithScrollView]; // 添加定时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:scrollTime target:self selector:@selector(automateScroll) userInfo:nil repeats:YES];
} // 每隔scrollTime秒就滚动一次
- (void)automateScroll
{
// 因为开始时出现的图片是imageArray中的第二张图片,后面求余后还加1,使得contentOffset为2*width
static int contentOffsetX = ;
// 为了偏移量始终在(1 至 imageArray.count-2)*width中,((contentOffsetX % (imageArray.count - 2))求余得到的数值在 0~imageArray.count-3中, + 1后让数值保持在 1 至 imageArray.count-2 中
_scrollView.contentOffset = CGPointMake(((contentOffsetX % (imageArray.count - )) + ) *width, );
contentOffsetX ++;
NSLog(@"==%d",contentOffsetX);
}
/**
* 给scrollView添加图片
*/
- (void)addImagesWithScrollView
{
for (int i = ; i < imageArray.count; i++) {
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageArray[i]]];
imageView.frame = CGRectMake(i * width, , width, heigthY);
[_scrollView addSubview:imageView];
[imageView release];
}
} //#pragma mark - UIScrollViewDelegate的方法
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int imageIndex = scrollView.contentOffset.x / width;
if (imageIndex == ) {
// 滚到第一张图片时,就跳转到倒数第二张图片
[_scrollView scrollRectToVisible:CGRectMake((imageArray.count - )*width, , width, heigthY) animated:NO];
}else if (imageIndex == imageArray.count - ){
// 滚动到最后一张图片时,就跳转到第二张图片
[_scrollView scrollRectToVisible:CGRectMake(width, , width, heigthY) animated:NO];
}
} /**
* 设置pageControl的当前页
*/
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 加0.5是为了用户体验好些,滑动过程中哪张图片占优就显示占优图片对应的下标
int imageIndex = scrollView.contentOffset.x / width + 0.5;
if (imageIndex == ) {
// 设置相应的下标(使之减1后与pageControl的下标相对应)
imageIndex = (int)imageArray.count - ;
}else if (imageIndex == imageArray.count - ){
// 设置相应的下标(使之减1后与pageControl的下标相对应)
imageIndex = ;
}
pageControl.currentPage = imageIndex - ;
} @end

UIScrollView现实自动循环滚动的更多相关文章

  1. UIScrollView实现自动循环滚动广告

    实现效果如下: 功能说明: 程序运行,图片自动循环播放,采用定时器实现; 当用户用手势触摸滑动时,定时器的自动播放取消,停止触摸时,自动无限播放; 代码如下 : 采用封装视图,外部进行调用即可: 1. ...

  2. IOS实现自动循环滚动广告--ScrollView的优化和封装

    一.问题分析 在许多App中,我们都会见到循环滚动的视图,比如广告,其实想实现这个功能并不难,用ScrollView就可以轻松完成,但是在制作的过程中还存在几个小问题,如果能够正确的处理好这些小问题, ...

  3. 使用Recyclerview实现图片水平自动循环滚动

    简介: 本篇博客主要介绍的是如何使用RecyclerView实现图片水平方向自动循环(跑马灯效果) 效果图: 思路: 1.准备m张图片 1.使用Recyclerview实现,返回无数个(实际Inter ...

  4. 自动循环滚动ScrollView

    // // SBCycleScrollView.h // SBCycleScrollView // // Created by luo.h on 15/7/12. // Copyright (c) 2 ...

  5. ListView的自动循环滚动显示

    最近项目里需要做评价内容的循环滚动显示,一开始想到的就是定时器.后来查了资料才知道ListView里面有个函数smoothScrollToPosition(position),瞬间觉得简单了很多.首先 ...

  6. item上下自动循环滚动显示

    //li 上下滚动 (function($){ $.fn.extend({ Scroll:function(opt,callback){ //参数初始化 if(!opt) var opt={}; va ...

  7. IOS无限自动循环滚动banner(源码)

    本文转载至 http://blog.csdn.net/iunion/article/details/19080259  目前有很多APP都开始使用一些滚动banner,我自己也做了一个,部分算法没有深 ...

  8. UIScrollView循环滚动1

    现在基本每一个商业APP都会有循环滚动视图,放一些轮播广告之类的,都是放在UIScrollView之上.假如我要实现N张图片的轮播,我借鉴了几个博文,得到两种方法实现: [第一种]:如下图(图片来源于 ...

  9. 使用UIScrollView 结合 UIImageView 实现图片循环滚动

    场景: 在开发工作中,有时我们需要实现一组图片循环滚动的情况.当我们使用 UIScrollView 结合 UIImageView 来实现时,一般 UIImageView 会尽量考虑重用,下面例子是以( ...

随机推荐

  1. 安装Babel(命令行环境,针对Babel6.x版本)

    1.首先安装babel-cli(用于在终端使用babel) npm install -g babel-cli 2.然后安装babel-preset-es2015插件 npm install --sav ...

  2. redhat linux 中设置网卡固定ip

    更改 /etc/sysconfig/network-scripts/ifcfg-eth0(第一个网卡为eth0) DEVICE=eth0#网卡设备名称 ONBOOT=yes#启动时是否激活 yes | ...

  3. MongoDB 高可用集群搭建(3.4)

      一.架构概况192.168.56.101192.168.56.102192.168.56.103OS为centos 7.2 架构图: 规划5个组件对应的端口号,由于每台机器均需要同时部署 mong ...

  4. kylin_异常_02_java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf 解决办法

    一.异常现象 在kylin的web管理界面,设置hive数据源时,报错: 查找kylin的日志时发现,弹出提示框的原因是因为出现错误: ERROR [http-bio-7070-exec-10] co ...

  5. Nhibernate系列学习之(四) 数据操作

    数据操作,在这里主要介绍INSERT.UPDATE.DELETE.我们在使用NHibernate的时候,如果只是查询数据,不需要改变数据库的值,那么是不需要提交或者回滚到数据库的. 一.INSERT ...

  6. OpenCV-Python在图片上输出中文

    OpenCV中在图片上输出中文一般需要借助FreeType库实现.FreeType库是一个完全免费(开源)的.高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件.但使用FreeType ...

  7. 简洁的Jquery弹出窗插件

    做项目时,很多时候都需要弹窗提示.如果要求不是很严格的项目,直接使用alert就可以搞定.对于需要高度定制化的项目,而且要求比较高的时候,就需要设计符合整体风格的弹出层,这种有美工帮忙,也比较好搞定. ...

  8. python list和元祖

    一,元祖 在python中元祖是只能查询和读取的一组数据,在()内的赋值就是元祖,只有查询和读取的功能: 1.len()方法:查询元祖有多少个元素 s = (') print(len(s)) 结果: ...

  9. 浅议Windows 2000/XP Pagefile组织管理

    任何时候系统内存资源相对磁盘空间来说都是相形见拙的.因为虚拟内存机制,使我们可以有相对丰富的地址资源(通常32bit的虚拟地址,可以有4G的寻址 空间),而这些资源对物理内存来说一般情况是总是绰绰有余 ...

  10. Wireshark图解教程(简介、抓包、过滤器)【转载】

    原文网址:http://blog.sina.com.cn/s/blog_5d527ff00100dwph.html Wireshark是世界上最流行的网络分析工具.这个强大的工具可以捕捉网络中的数据, ...