因为昨天在网上找了很久,很多只能实现向右滚动,而且一张图一个imageview ,感觉工作量很可怕啊 ,  下面的例子就是不论你多少图 , 只和我代码里面的几个数值有关,  只需要修改分页和循环i的最大值,当然为了方便 , 您最好把图片的名字改成有序的 。 方便您添加到可变集合中。

如果这样的页面你有五页 或则更多都可以实现好像从最后一张图跳到第一张图。

这个其实总共只有3个image,图都是用循环加进去的 。

上代码

  1. #import <UIKit/UIKit.h>
  2. #define WIDTH self.view.bounds.size.width
  3. #define HEIGHT self.view.bounds.size.height
  4. @interface ViewController : UIViewController<UIScrollViewDelegate>
  5. @property(strong,nonatomic) UIScrollView *scrollview;
  6. @property(strong,nonatomic) UIPageControl *pagecontrol;
  7. //存储图片
  8. @property(strong,nonatomic) NSMutableArray * imageArray;
  9. //当前页码
  10. @property(assign,nonatomic) int currentPage;
  11. //存储图片
  12. @property(strong,nonatomic) UIImageView * firstImage;
  13. @property(strong,nonatomic) UIImageView * secondImage;
  14. @property(strong,nonatomic) UIImageView *thirdImage;
  15.  
  16. @end
  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()
  4.  
  5. @end
  6.  
  7. @implementation ViewController
  8.  
  9. - (void)viewDidLoad {
  10. [super viewDidLoad];
  11. self.scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, WIDTH,HEIGHT )];
  12.  
  13. self.scrollview.contentSize=CGSizeMake(WIDTH*3, 0);
  14. //是否分页
  15. self.scrollview.pagingEnabled=YES;
  16. //添加代理
  17. self.scrollview.delegate=self;
  18. //隐藏滚动条
  19. self.scrollview.showsHorizontalScrollIndicator=NO;
  20. [self.view addSubview:self.scrollview];
  21.  
  22. self.pagecontrol=[[UIPageControl alloc]initWithFrame:CGRectMake(WIDTH/5*3, HEIGHT/5*4, WIDTH/3, 40)];
  23. //设置当前页
  24. self.pagecontrol.currentPage=0;
  25. //分页
  26. self.pagecontrol.numberOfPages=5;
  27. //指定页码颜色
  28. self.pagecontrol.currentPageIndicatorTintColor=[UIColor redColor];
  29. self.pagecontrol.pageIndicatorTintColor=[UIColor blueColor];
  30. [self.view addSubview:self.pagecontrol];
  31.  
  32. //初始化存储图片的集合
  33. self.imageArray=[NSMutableArray array];
  34. for (int i=1; i<6; i++) {
  35. UIImage *image=[UIImage imageNamed:[NSString stringWithFormat:@"%d",i]];
  36. [self.imageArray addObject:image];
  37. }
  38.  
  39. self.firstImage=[[UIImageView alloc]init];
  40. self.secondImage=[[UIImageView alloc]init];
  41. self.thirdImage=[[UIImageView alloc]init];
  42. //当前页码
  43. self.currentPage=0;
  44. [self reloadImage];
  45.  
  46. }
  47. -(void)reloadImage
  48. {
  49. //第一种情况 , 第一页
  50. if (self.currentPage==0) {
  51. self.firstImage.image=[self.imageArray lastObject];
  52. self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
  53. self.thirdImage.image = [self.imageArray objectAtIndex:self.currentPage + 1];
  54. }
  55. // 第二种情况 最后一页
  56. else if (self.currentPage == self.imageArray.count - 1) {
  57. self.firstImage.image = [self.imageArray objectAtIndex:self.currentPage - 1];
  58. self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
  59. self.thirdImage.image = [self.imageArray objectAtIndex:0];
  60. }
  61. // 第三种情况 中间页
  62. else {
  63. self.firstImage.image = [self.imageArray objectAtIndex:self.currentPage - 1];
  64. self.secondImage.image = [self.imageArray objectAtIndex:self.currentPage];
  65. self.thirdImage.image = [self.imageArray objectAtIndex:self.currentPage + 1];
  66. }
  67. self.firstImage.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
  68. self.secondImage.frame = CGRectMake(WIDTH, 0, WIDTH, HEIGHT);
  69. self.thirdImage.frame = CGRectMake(WIDTH* 2, 0, WIDTH, HEIGHT);
  70.  
  71. [self.scrollview addSubview:self.firstImage];
  72. [self.scrollview addSubview:self.secondImage];
  73. [self.scrollview addSubview:self.thirdImage];
  74.  
  75. self.scrollview.contentOffset = CGPointMake(WIDTH, 0);
  76.  
  77. }
  78.  
  79. -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
  80. {
  81.  
  82. float x= self.scrollview.contentOffset.x;
  83. //向左
  84. if (x<0||x==0) {
  85. if (self.currentPage==0) {
  86. self.currentPage=(int)self.imageArray.count-1;
  87. }
  88. else{
  89. self.currentPage--;
  90. }
  91. }
  92. //向右
  93. if (x > WIDTH * 2 || x == WIDTH * 2) {
  94. if (self.currentPage == (int)self.imageArray.count - 1) {
  95. self.currentPage = 0;
  96. }
  97. else {
  98. self.currentPage++ ;
  99. }
  100. }
  101.  
  102. self.pagecontrol.currentPage = self.currentPage;
  103.  
  104. [self reloadImage];
  105.  
  106. }
  107. - (void)didReceiveMemoryWarning {
  108. [super didReceiveMemoryWarning];
  109. // Dispose of any resources that can be recreated.
  110. }
  111.  
  112. @end

UIscrollView和UIPageControl的循环滚动的更多相关文章

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

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

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

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

  3. UIScrollView循环滚动1

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

  4. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

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

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

  6. UI:UIScrollView、UIPageControl

    一.UIScrollView的常⽤用属性 二.UIScrollView的常⽤用代理方法 三.UIPageControl的使⽤用 四.UIPageControl与UIScrollView的结合使⽤用 U ...

  7. UIScrollView和UIPageControl学习使用

    # UIScrollView和UIPageControl # 概要 对于同一个页面需要展示很多图片信息.子视图等的这样的需求,我们可以采用控件UIScrollVIew,与之常常一起使用的控件是UIPa ...

  8. UIScrollView 和 UIPageControl

    UIScrollView [滚动视图]非常重要 UIScrollView是滚动视图,是其它带有滚动功能视图的父类, 本身不显示或者只显示背景,主要负责子视图的滚动和翻页. 一.常用属性 1.基本方法 ...

  9. NGUI实现的一套不同大小 Item 的循环滚动代码

    测试: 数据 & Item  的 Ctrl : using UnityEngine; public class ScrollViewItemData { public int index; p ...

随机推荐

  1. Auto Mapper02《demo》

         学习这些基本上网上都有一些教程或者别人做的demo,我是按照这个方式去学习的.先做个demo,学会如何去使用它,接着去慢慢的了解它是如何的运行的,理解里面的一些基本的基础知识.我们不可以再像 ...

  2. 【WebService】WebService的创建和使用——文件名称生成器

    简介 之前做过一个文件名称生成器,通过Webservice读取XML文件并将其通过Json传到客户端中的combobx,用户通过combobox选择要生成文件的名称模板,点击生成则会产生一个文件名称并 ...

  3. 【FTP】C# System.Net.FtpClient库连接ftp服务器(下载文件)

    如果自己单枪匹马写一个连接ftp服务器代码那是相当恐怖的(socket通信),有一个评价较高的dll库可以供我们使用. 那就是System.Net.FtpClient,链接地址:https://net ...

  4. DataGridView修改HeaderText

    dataGridView_htList为一个 DataGridView(ht为HoverTree的缩写)方法一:dataGridView_htList.Columns["HtAddTime& ...

  5. C# AD(Active Directory)域信息同步,组织单位、用户等信息查询

    示例准备 打开上一篇文章配置好的AD域控制器 开始菜单-->管理工具-->Active Directory 用户和计算机 新建组织单位和用户   新建层次关系如下: 知识了解 我们要用C# ...

  6. C#读取XML文件的基类实现

    刚到新单位,学习他们的源代码,代码里读写系统配置文件的XML代码比较老套,直接写在一个系统配置类里,没有进行类的拆分,造成类很庞大,同时,操作XML的读写操作都是使用SetAttribute和node ...

  7. Linux环境下安装Tigase XMPP Server

    Tigase是一种XMPP服务器,可以作为采用XMPP协议的各种IM(Instant Messeging)工具(如Pandion.Spark等)的服务器. 在Linux环境下安装Tigase的步骤如下 ...

  8. Eclipse的SVN插件下载

    Links for 1.8.x Release:Eclipse update site URL: http://subclipse.tigris.org/update_1.8.xsvn插件包下载: h ...

  9. 高级Java研发工程师面试题总结

    目录 一.Java基础 二.JVM虚拟机基础 三.开源框架基础 四.分布式基础 五.设计模式基础 六.数据库基础 七.网络基础 八.数据结构和算法基础 九.Linux基础 十.其他技术基础 一.JAV ...

  10. No.018:4Sum

    问题: Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = ...