1. #import "RootViewController.h"
  2.  
  3. #define width [UIScreen mainScreen].bounds.size.width
  4. #define heigthY 150
  5. #define scrollTime 1
  6.  
  7. @interface RootViewController ()<UIScrollViewDelegate>
  8. {
  9. UIScrollView *_scrollView;
  10. NSMutableArray *imageArray;
  11. UIPageControl *pageControl;
  12. }
  13. @end
  14.  
  15. @implementation RootViewController
  16.  
  17. - (void)dealloc
  18. {
  19. imageArray = nil;
  20. [super dealloc];
  21. }
  22.  
  23. - (void)loadView
  24. {
  25. [super loadView];
  26. _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(, , width, heigthY)];
  27. _scrollView.pagingEnabled = YES;
  28. _scrollView.delegate = self;
  29. // 开始时选中第二个图片 图片的布局[3-1-2-3-1]
  30. _scrollView.contentOffset = CGPointMake(width, );
  31. // 隐藏水平滚动条
  32. _scrollView.showsHorizontalScrollIndicator = NO;
  33.  
  34. pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(width - ,heigthY - , , )];
  35. // 设置pageControl不支持用户操作
  36. pageControl.userInteractionEnabled = NO;
  37. pageControl.currentPageIndicatorTintColor = [UIColor redColor];
  38. pageControl.pageIndicatorTintColor = [UIColor greenColor];
  39. [self.view addSubview:_scrollView];
  40. [self.view addSubview:pageControl];
  41. [_scrollView release];
  42. [pageControl release];
  43.  
  44. }
  45.  
  46. - (void)viewDidLoad {
  47. [super viewDidLoad];
  48. imageArray = [[NSMutableArray alloc] init];
  49. NSArray *tempArray = @[@"1-3.jpg",@"1-1.jpg",@"1-2.jpg",@"1-3.jpg",@"1-1.jpg"];
  50. [imageArray addObjectsFromArray:tempArray];
  51. // 根据imageArray的数量设置_scrollView的内容大小
  52. _scrollView.contentSize = CGSizeMake(width * imageArray.count, heigthY);
  53. pageControl.numberOfPages = imageArray.count - ;
  54. // 给_scrollView添加图片
  55. [self addImagesWithScrollView];
  56.  
  57. // 添加定时器
  58. NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:scrollTime target:self selector:@selector(automateScroll) userInfo:nil repeats:YES];
  59. }
  60.  
  61. // 每隔scrollTime秒就滚动一次
  62. - (void)automateScroll
  63. {
  64. // 因为开始时出现的图片是imageArray中的第二张图片,后面求余后还加1,使得contentOffset为2*width
  65. static int contentOffsetX = ;
  66. // 为了偏移量始终在(1 至 imageArray.count-2)*width中,((contentOffsetX % (imageArray.count - 2))求余得到的数值在 0~imageArray.count-3中, + 1后让数值保持在 1 至 imageArray.count-2 中
  67. _scrollView.contentOffset = CGPointMake(((contentOffsetX % (imageArray.count - )) + ) *width, );
  68. contentOffsetX ++;
  69. NSLog(@"==%d",contentOffsetX);
  70. }
  71. /**
  72. * 给scrollView添加图片
  73. */
  74. - (void)addImagesWithScrollView
  75. {
  76. for (int i = ; i < imageArray.count; i++) {
  77. UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageArray[i]]];
  78. imageView.frame = CGRectMake(i * width, , width, heigthY);
  79. [_scrollView addSubview:imageView];
  80. [imageView release];
  81. }
  82. }
  83.  
  84. //#pragma mark - UIScrollViewDelegate的方法
  85. - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  86. {
  87. int imageIndex = scrollView.contentOffset.x / width;
  88. if (imageIndex == ) {
  89. // 滚到第一张图片时,就跳转到倒数第二张图片
  90. [_scrollView scrollRectToVisible:CGRectMake((imageArray.count - )*width, , width, heigthY) animated:NO];
  91. }else if (imageIndex == imageArray.count - ){
  92. // 滚动到最后一张图片时,就跳转到第二张图片
  93. [_scrollView scrollRectToVisible:CGRectMake(width, , width, heigthY) animated:NO];
  94. }
  95. }
  96.  
  97. /**
  98. * 设置pageControl的当前页
  99. */
  100. - (void)scrollViewDidScroll:(UIScrollView *)scrollView
  101. {
  102. // 加0.5是为了用户体验好些,滑动过程中哪张图片占优就显示占优图片对应的下标
  103. int imageIndex = scrollView.contentOffset.x / width + 0.5;
  104. if (imageIndex == ) {
  105. // 设置相应的下标(使之减1后与pageControl的下标相对应)
  106. imageIndex = (int)imageArray.count - ;
  107. }else if (imageIndex == imageArray.count - ){
  108. // 设置相应的下标(使之减1后与pageControl的下标相对应)
  109. imageIndex = ;
  110. }
  111. pageControl.currentPage = imageIndex - ;
  112. }
  113.  
  114. @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. bgcolor RGB 和16进制之间的转换,16进制转RGB,源码

    <p>bgcolor RGB 和16进制之间的转换,16进制转RGB,源码例如:<br /> 输入 201,255,201 转换成 #C9FFC9</p> < ...

  2. visual assist(VA)设置快捷键(其它安装的插件设置快捷键也在这里)

    安装完visual assist后发现快捷键无法使用纠结,然后找如何去设置快捷建以此记录一下: 在Tools-->customize-->Keyboard-->Add-ins 常用的 ...

  3. Spring MVC配置文件的三个常用配置详解

    转自:http://www.cnblogs.com/benwu/articles/5162614.html Spring MVC项目中通常会有二个配置文件,sprng-servlet.xml和appl ...

  4. Node.Js and Mongoose

    Mongoose官方API,我做完之后整理出来的心得. ONE· Getting Started First be sure you have MongoDB and Node.js installe ...

  5. Cash Machine(多重背包二进制转换)

    个人心得:多重背包,自己根据转换方程写总是TLE,后面去网上看了二进制转换,不太理解: 后面仔细想了下,用自己的思想理解下把,就是将对应number,cash总和用二进制拆分, 然后全部装入到一个数组 ...

  6. 基于spring及zookeeper的dubbo工程搭建

    一.生产者搭建 新建一个maven工程,勾选Create a simple project Packaging方式选择jar包的方式. 修改pom.xml文件: <project xmlns=& ...

  7. dockerfile http_php

    FROM centos6.6-php5.5:0.0.1 MAINTAINER syberos:wangmo RUN mv /etc/php.ini /etc/php.ini.bak COPY ./ph ...

  8. TX2上安装spi和uart驱动

    替换/boot目录下的Image文件 重新烧写dtb文件.烧写方式参考. 文件下载

  9. 获取APK的package名和activity名

    使用 aapt dump badging + 需要安装的APK

  10. java代码输出1到100的质数

    总结:循环,循环.. package com.dfd; import java.util.Scanner; //输出0到100的质数 //要判断当到100时候,等于2的直接输出,能被2整除的不输出, ...